fishdelphi 发表于 2014-8-14 10:29:10

修该软件标题栏

我想修改某软件标题栏上的字,用setwindowtext能修改成功,但某软件缩小再放大后,标题又恢复原来.于是我用循环,但结果就是程序假死,请问有没有比较好的办法?只要能达到实时修改的目的就行


HWND hwnd=::FindWindow("软件",NULL);
        char buf;


while(1)

{
::GetWindowText(hwnd,buf,sizeof(buf));
if(buf != "123")
   {
      ::SetWindowText(hwnd,"123");
   }
}

machimilk 发表于 2014-8-14 11:56:17

你既然死循环设置标题,那还判断什么啊,直接设置啊,另外循环的尾部加个sleep就应该好了

feixiangmenghu 发表于 2014-8-14 13:22:13

#include "stdafx.h"
#include "resource.h"
HINSTANCE g_hInst;

void OnPaint(HWND hWnd)
{
   PAINTSTRUCT ps;
   HDC hdc = BeginPaint(hWnd,&ps);
   //HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,"./Picture.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
   HBITMAP hBitmap = LoadBitmap(g_hInst,(LPCTSTR)IDB_BITMAP1);
   BITMAP bm;
   //获取图片信息
   GetObject(hBitmap,sizeof(bm),&bm);
   HDC dc = CreateCompatibleDC(hdc);
   SelectObject(dc,hBitmap);
   MoveWindow(hWnd,0,0,bm.bmWidth,bm.bmHeight,FALSE);
   BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,dc,0,0,SRCCOPY);
   //
   RECT rect;
   GetClientRect(hWnd,&rect);
   Rectangle(hdc,100,100,300,500);
   LineTo(hdc,100,100);
   MoveToEx(hdc,300,500,NULL);
   EndPaint(hWnd,&ps);
}

void OnInitDialog(HWND hwnd)
{
        //HICON hIcon = (HICON)LoadImage(NULL,"./1.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE);
        HICON hIcon = LoadIcon(g_hInst,(LPCTSTR)IDI_ICON1);
       
        ::SendMessage(hwnd, WM_SETICON, FALSE, (LPARAM)hIcon);
        SetWindowText(hwnd,"绘图测试");
}

void OnMouseMove(HWND hwnd)
{
        HCURSOR hCursor = LoadCursor(g_hInst,(LPCTSTR)IDC_CURSOR1);
        SetCursor(hCursor);
}
BOOL CALLBACK DialogProc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
        switch(uMsg) {
        case WM_PAINT:
                OnPaint(hwndDlg);
                return TRUE;
        case WM_INITDIALOG:
                OnInitDialog(hwndDlg);
                return TRUE;
        case WM_MOUSEMOVE:
                OnMouseMove(hwndDlg);
                return TRUE;
        case WM_COMMAND:
                switch(LOWORD(wParam))
                {
                case IDCANCEL:
                        EndDialog(hwndDlg,IDCANCEL);
                        return TRUE;
                case IDOK:
                        return TRUE;
                }
。。。。。。

fishdelphi 发表于 2014-8-14 13:27:08

machimilk 发表于 2014-8-14 11:56
你既然死循环设置标题,那还判断什么啊,直接设置啊,另外循环的尾部加个sleep就应该好了

加了sleep的,但仍然是假死.时间设置到10秒也一样

feixiangmenghu 发表于 2014-8-14 13:33:14

为了一个标题 用死循环。。。。。。。。。

用break试试

machimilk 发表于 2014-8-14 14:34:35

fishdelphi 发表于 2014-8-14 13:27
加了sleep的,但仍然是假死.时间设置到10秒也一样

你程序的主线程死循环 当然卡死了,非要这么弄 就createthread,把死循环写在新开的线程里面

fishdelphi 发表于 2014-8-14 14:55:25

machimilk 发表于 2014-8-14 14:34
你程序的主线程死循环 当然卡死了,非要这么弄 就createthread,把死循环写在新开的线程里面

谢谢.我的意思是有没有其他办法?比如能实时监控到标题栏的改变.

machimilk 发表于 2014-8-14 15:03:20

fishdelphi 发表于 2014-8-14 14:55
谢谢.我的意思是有没有其他办法?比如能实时监控到标题栏的改变.

监视也要死循环监视啊,都是单开线程的

fishdelphi 发表于 2014-8-14 16:59:18

machimilk 发表于 2014-8-14 15:03
监视也要死循环监视啊,都是单开线程的

谢谢,你懂我的意思,解决了.非常感谢

智商是硬伤 发表于 2015-8-25 07:34:00

{:7_146:}
页: [1]
查看完整版本: 修该软件标题栏