我正在学习使用Win32 :: GUI将GUI添加到我的Perl程序中.现在,我可以使用以下内容更改Win32标题栏的图标:
$myicon = new Win32::GUI::Icon('myicon.ico');
$myclass=new Win32::GUI::Class(
-name=>'myclass',
-icon=>$myicon,
);
$mydialogbox = new Win32::GUI::DialogBox(
-name => 'mydialogbox',
-class => $myclass,
);
Run Code Online (Sandbox Code Playgroud)
但是,其他的东西,比如背景颜色,最小化按钮的外观和感觉呢?
我搜索了这个主题并找到了几篇可能相关的文章.他们谈论非客户区域等等的东西,但代码片段似乎都是用C语言编写的,我对此并不熟悉.
我想知道是否有人在这里可以分享一些用Perl编写的代码片段来处理类似的情况?或者,希望是否有可以促进任务的Perl模块?
谢谢你的任何指导:)
********UPDATE1
我可以先使标题栏消失,然后在原始标题栏中添加标签,然后添加一些其他按钮以最小化和关闭对象吗?
现在的问题是:当我的鼠标在标签上时,如何移动Window对象?
********UPDATE2
我发现了一些VB代码片段应该完成我想要在Perl中完成的工作.有人可以帮我在Win32 :: GUI中重写它们吗?以下VB代码是在这里:
Option Explicit
' API functions
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function …Run Code Online (Sandbox Code Playgroud) 你好我想在D中用win32打开一个窗口,我有一点问题.当我调用CreateWindowA时程序崩溃.
这是我的代码:
this.fenetrePrincipale = CreateWindowA(this.classeFenetre.lpszClassName, toStringz(title), WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, null, null, this.hInstance, null);
Run Code Online (Sandbox Code Playgroud)
有:
this.classeFenetre.lpszClassName = toStringz("classeF");
this.hInstance = GetModuleHandleA(null);
Run Code Online (Sandbox Code Playgroud)
和
string title = "test";
Run Code Online (Sandbox Code Playgroud)
当我启动exe时,程序崩溃了,我得到了:
进程终止,状态为-1073740791
在代码:: blocks.
我今天发现GetWindowLong(和GetWindowLongPtr)有'ANSI'(A)和'Unicode'(W)风格,即使它们没有TSTR参数.在MSDN上的页面GetWindowLong只是表明这些变体存在,但并没有提到为什么.
我可以想象它必须匹配CreateWindowEx(也有A/W口味)的编码,或者RegisterClass,但由于许多原因,我不认为这是有道理的.显然,这很重要,因为有人报告说Unicode版本可能在XP上失败(即使XP是NT,据我所知,所有的Unicode都在引擎盖下).我还试图反汇编32位版本USER32.DLL(包含两种风格GetWindowLong),并根据一些明显的编码差异*进行了额外的工作.
我应该选择哪种功能?
*它们的风格GetWindowLong是相同的,除了它们传递给其他函数的布尔值.这个布尔值与存储器结构中的标志位进行比较.我不能打扰使用静态代码分析进行跟踪.
如何在任务面板之前将自定义工具栏放在Windows 7的任务栏上?有一个名为Pokki的流行应用程序可以做到这一点.
我想知道我该怎么做?
编辑1:我需要100%的方式来访问Windows 7的自定义工具栏(DeskBand?).我不是在寻找一个pin-an应用程序解决方案,而是一种构建自定义解决方案的方法,该解决方案能够处理它自己的消息并显示它的自己的图标.C#方式非常感谢.
Edit2:非常感谢WPF方式.
是否可以将显示屏上的原点从左上角移动到显示屏的中心?
我为什么要这样做?这样,我可以绘制如下点:
(-21,-25),(22,-25),(21,25),(-21,25)
正如您所看到的,其中一些是负面的,因此在显示屏上不可见。有什么建议么?
我想使用Python从另一个程序中读取文本标签。我想我必须使用WM_GETTEXT,但我不知道怎么做,也无法在互联网上找到任何东西。我的程序获取活动窗口,但不读取文本标签。所以我希望有人能帮助我。
编辑:我已经添加了缓冲区和SendMessage部分。例如,我可以从编辑器中获取文本,但不能从试图从中获取文本标签的程序中获取文本。
我有以下代码,这些是在stackoverflow(从弹出窗口获取文本)上找到的:
import win32gui
import time
while True:
window = win32gui.GetForegroundWindow()
title = win32gui.GetWindowText(window)
if 'GLS Exportdatei' in title:
control = win32gui.FindWindowEx(window, 0, 'static', None)
buffer = win32gui.PyMakeBuffer(20)
length = win32gui.SendMessage(control, win32con.WM_GETTEXT, 20, buffer)
result = buffer[:length]
print result
time.sleep(1)
Run Code Online (Sandbox Code Playgroud) 我正在制作Win32 GUI应用程序,我想在按钮上显示↺字符.
通常,我认为会插入一个像这样的unicode字符:
HWND button = CreateWindow("BUTTON", "\u27F3",
WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, size - 105,
size - 29, 100, 24, hwnd, (HMENU)IDI_BUTTON,
GetModuleHandle(NULL), NULL);
Run Code Online (Sandbox Code Playgroud)
其中"\ u27F3"是此处描述的"C/C++/Java"下的unicode字符 http://www.fileformat.info/info/unicode/char/27f3/index.htm
但是,当我这样做时,我不会得到箭头角色而是另一个角色?出了什么问题?
谢谢!
我正在将Lua作为脚本语言实现到Windows应用程序中.由于应用程序的结构,打印输出不使用流式传输io,例如stdout和stderror.
我设法覆盖Lua print以适应我的结构......
lua_register(L,"print", cs_print);
Run Code Online (Sandbox Code Playgroud)
...但是如何在不使用流的情况下覆盖调试打印输出的所有错误?我需要在一个函数中处理它(类似于print).
我已经使用Python中的win32gui库获得了要定位的窗口的句柄
如何关闭窗户?
我有以下代码,第二行做了我打算做的
但最后一行似乎是错误的。
handle = win32gui.FindWindow(None, r'Notepad++')
win32gui.SetForegroundWindow(handle)
win32gui.CloseWindow(handle)
Run Code Online (Sandbox Code Playgroud)
我还想知道是否只想关闭窗口,第二行是否必要?
除此之外,我注意到一件小事,对此感到好奇:
如果我尝试
win32gui.CloseWindow(handle)
Run Code Online (Sandbox Code Playgroud)
在Python shell中,我得到了类似的东西:
2500276L
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试
handle = win32gui.CloseWindow(handle)
print handle
Run Code Online (Sandbox Code Playgroud)
然后我得到
2500276
Run Code Online (Sandbox Code Playgroud)
最后的“ L”有什么区别吗?
感谢您的关注!!
我的 win32 GUI 内容每秒都会更改,但除非手动移动窗口,否则不会显示更新。我尝试每秒弹出一个消息框来触发窗口刷新并且它起作用了。因此,这证明我的内容确实发生了变化,但窗口没有更新。我希望刷新窗口而不是每次都弹出消息框,有没有这样的窗口功能?谢谢
case WM_PAINT:
RECT fingerprintSection;
fingerprintSection.left=500;
fingerprintSection.top=300;
fingerprintSection.bottom=540;
fingerprintSection.right=660;
wmId = LOWORD(wParam);
hdc = BeginPaint(hWnd, &ps);
refresh=!refresh;
if((start==true)&&(refresh==true)&&(stop!=true))
{
windowName = MultiByteStringToWideString(name1, CP_ACP);
LoadAndBlitBitmap(windowName.c_str(), hdc,500,0);//loading a picture that doesnt change
fingerprint();
LoadAndBlitBitmap(TEXT("outresized.bmp"), hdc,500,300);//loading a picture that constantly change
refresh=!refresh;
//RedrawWindow(hWnd,&fingerprintSection,NULL,RDW_INTERNALPAINT|RDW_VALIDATE|RDW_UPDATENOW|RDW_NOCHILDREN);
InvalidateRect( hWnd, &fingerprintSection, TRUE );
}
EndPaint(hWnd, &ps);
break;
Run Code Online (Sandbox Code Playgroud)