月度归档: 2017 年 10 月

  • WinForm文本框上按回车切换到下一个输入

    WinForm文本框上按回车切换到下一个输入

    protected override bool ProcessDialogKey(Keys keyData)
    {
        if ((ActiveControl is TextBox || ActiveControl is ComboBox) && keyData == Keys.Enter)
        {
            keyData = Keys.Tab;
        }
        return base.ProcessDialogKey(keyData);
    }
  • ASP.NET 使用FastMember 把List转成 DataTable

    FastMember 可以在 Nuget 里找到

    配合 Dapper 很好用。

    用 Dapper 的时候,要定义实体,像这样调用conn.Query<OrderModel>(sql).ToList(), 不然 FastMember 转成的 DataTable 是空的

    private void btnSearch_Click(object sender, EventArgs e)
    {
    	using (var conn = Db.OpenConnection())
    	{
    		var sql = "SELECT * FROM dbo.[Order] where 客户名称 like '%张%'";
    		var data = conn.Query<OrderModel>(sql).ToList();
    
    		DataTable table = new DataTable();
    		using (var reader = ObjectReader.Create(data))
    		{
    			table.Load(reader);
    			this.dataGridView1.DataSource = table;
    		}
    		
    	}
    }
  • VC获取进程加载的DLL模块

    VC++获取进程加载的DLL模块:

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <psapi.h>
    
    // To ensure correct resolution of symbols, add Psapi.lib to TARGETLIBS// and compile with -DPSAPI_VERSION=1
    
    int PrintModules(DWORD processID)
    {
        HMODULE hMods[1024];
        HANDLE hProcess;
        DWORD cbNeeded;
        unsigned int i;
    
        // Print the process identifier.
    
        printf("\nProcess ID: %u\n", processID);
    
        // Get a handle to the process.
    
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                               FALSE, processID);
        if (NULL == hProcess)
            return 1;
    
        // Get a list of all the modules in this process.
    
        if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
        {
            for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
            {
                TCHAR szModName[MAX_PATH];
    
                // Get the full path to the module's file.
    
                if (GetModuleFileNameEx(hProcess, hMods[i], szModName,
                                        sizeof(szModName) / sizeof(TCHAR)))
                {
                    // Print the module name and handle value.
    
                    _tprintf(TEXT("\t%s (0x%08X)\n"), szModName, hMods[i]);
                }
            }
        }
    
        // Release the handle to the process.
    
        CloseHandle(hProcess);
    
        return 0;
    }
    
    int main(void)
    {
    
        DWORD aProcesses[1024];
        DWORD cbNeeded;
        DWORD cProcesses;
        unsigned int i;
    
        // Get the list of process identifiers.
    
        if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
            return 1;
    
        // Calculate how many process identifiers were returned.
    
        cProcesses = cbNeeded / sizeof(DWORD);
    
        // Print the names of the modules for each process.
    
        for (i = 0; i < cProcesses; i++)
        {
            PrintModules(aProcesses[i]);
        }
    
        return 0;
    }
  • 使用命令行查看进程加载的DLL

    windows中,可以使用命令行查看进程加载的DLL。

    查看所有进程的加载的DLL:

    tasklist /m

    查看指定进程加载的DLL (例如查看notepad++.exe)

    tasklist /m /fi "imagename eq notepad++.exe"

  • mysql的bit字段取值只能为0和1,相当于bool类型

    mysql的bit字段取值只能为0和1,相当于bool类型,如果取了别的值,mysql也不报错,但是数据无变化,更新不了。 这是mysql坑的一个地方 

    例如 update queue set is_called=2 where id=5

    is_called是bit类型,这个语句可以执行成功,但是受影响行数为0