应该如何做呢?我做了一个键盘钩子 处理消息时加入以下代码
long Style;
long exstyle;
DEVMODE  devmode;
devmode.dmPelsWidth=1024;
devmode.dmPelsHeight=768;
devmode.dmBitsPerPel=16;
devmode.dmDisplayFrequency=75;
ChangeDisplaySettings(&devmode,0);
pWnd=(HWND)FindWindow(NULL,"NAME");
Style=GetWindowLong(pWnd, GWL_STYLE);
Style=Style | WS_CAPTION;
SetWindowLong(pWnd, GWL_STYLE, Style);
exstyle=GetWindowLong(pWnd,GWL_EXSTYLE);
exstyle=exstyle | WS_EX_APPWINDOW | WS_EX_OVERLAPPEDWINDOW;
SetWindowLong(pWnd,GWL_EXSTYLE,exstyle);
SetWindowPos(pWnd,HWND_NOTOPMOST,0,0,800,600,SWP_SHOWWINDOW);
ShowWindow(pWnd,SW_SHOWNORMAL);程序的窗口确实有了标题栏,但分辨率依然是程序默认的800,600   颜色也不对,好像是256色请教高手,应该怎么样做呢?

解决方案 »

  1.   

    你的ChangeDisplaySettings并未成功
    DEVMODE  devmode;
    ZeroMemory(&devmode,sizeof(devmode));
    devmode.dmSize=sizeof(DEVMODE);
    devmode.dmPelsWidth=1024;
    devmode.dmPelsHeight=768;
    devmode.dmBitsPerPel=16;
    devmode.dmDisplayFrequency=75;
    ChangeDisplaySettings(&devmode,0);
      

  2.   

    谢谢DentistryDoctor 现在分辨率跟颜色好像都对了!
    但一个新的问题被HOOK的程序画面没有了,这是为什么呢???
      

  3.   

    被HOOK的程序画面没有了,这是为什么呢???
    不明白,因为不清楚你的代码是怎么写的。
      

  4.   

    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {//按HOME
    BOOL bKeyUp = lParam & (1 << 31);
    if (bKeyUp && wParam == VK_HOME && nCode == HC_ACTION) 
    {
    long Style;
    long exstyle;
    DEVMODE  devmode;
    ZeroMemory(&devmode,sizeof(devmode));
    devmode.dmSize=sizeof(DEVMODE);
    devmode.dmPelsWidth=800;
    devmode.dmPelsHeight=600;
    devmode.dmBitsPerPel=16;
    devmode.dmDisplayFrequency=75;
    pWnd=(HWND)FindWindow(NULL,"name");
    Style=GetWindowLong(pWnd, GWL_STYLE);
    Style=Style | WS_CAPTION;
    SetWindowLong(pWnd, GWL_STYLE, Style);
    exstyle=GetWindowLong(pWnd,GWL_EXSTYLE);
    exstyle=exstyle | WS_EX_APPWINDOW | WS_EX_OVERLAPPEDWINDOW;
    SetWindowLong(pWnd,GWL_EXSTYLE,exstyle);
    SetWindowPos(pWnd,HWND_NOTOPMOST,0,0,800,600,SWP_SHOWWINDOW);
    ShowWindow(pWnd,SW_SHOWNORMAL);//修改窗体的回调函数地址到我们自己定义的回调函数
    ChangeDisplaySettings(&devmode,0);
    }
    else 
    {
    pCWndWGMain->ShowWindow(pCWndWGMain->IsWindowVisible() ? SW_HIDE : SW_SHOW);
    }
    return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
    }就这一段代码 ,别的没拉
      

  5.   

    没有用的。DirectX直接访问显存,普通Windows程序没有办法改的。