GVKun编程网logo

在PyQt中使用Windows 7任务栏功能

14

在本文中,您将会了解到关于在PyQt中使用Windows7任务栏功能的新资讯,并给出一些关于c#–Windows7任务栏图标突出显示颜色、Java中的Windows7任务栏进度条、VB6调用Windo

在本文中,您将会了解到关于在PyQt中使用Windows 7任务栏功能的新资讯,并给出一些关于c# – Windows 7任务栏图标突出显示颜色、Java中的Windows 7任务栏进度条、VB6调用Windows7任务栏进度条的ITaskbarList3接口、Win7任务栏右下角提示未能连接一个windows服务修复方法的实用技巧。

本文目录一览:

在PyQt中使用Windows 7任务栏功能

在PyQt中使用Windows 7任务栏功能

我正在寻找有关将某些Windows 7任务栏新功能集成到我的PyQt应用程序中的信息。

特别是,如果已经存在使用新进度指示器(请参见此处)和快速链接(www.petri.co.il/wp-
content/uploads/new_win7_taskbar_features_8.gif)的可能性。

如果有人可以提供一些链接或只是“未实现”,我将不胜感激。

非常感谢。

c# – Windows 7任务栏图标突出显示颜色

c# – Windows 7任务栏图标突出显示颜色

任何人都可以解释如何计算基于主要颜色的突出显示颜色,如 Windows-7任务栏,当鼠标在任务栏项目结束时?
任何c#代码?

解决方法

我相信它是使用类似于以下方法的应用程序图标中最突出的颜色: Python – Find dominant/most common color in an image

使用该信息,它将应用半透明的径向渐变色调,并根据您的鼠标位置进行定位.梯度对于鼠标的中心是更白的,但是中心实际上是在屏幕之外.更接近实际的任务栏项目,它变得越透明.

Java中的Windows 7任务栏进度条

Java中的Windows 7任务栏进度条

我想知道是否有可能使任务栏上显示的进度条像Windows资源pipe理器一样,当有文件操作正在进行?

我看到很多例子,但都涉及C#。

SWT不会削减它。

使用getRuntime().exe(cmd)更改registry项的值不会更改registry值,即使操作已成功结束

如何在JAVA中运行Windows命令并将结果文本作为string返回

当提交MapReduce作业到Hadoop 2.2从Windows到Ubuntu的UnsatisfiedLinkError(NativeIO $ Windows.access0)

Logstash加载错误

Android Studio – 无法确定Java版本

了解Windows上Web服务器的高系统cpu使用情况

在64位CENTOS上安装32位Java:错误java / lang / Object

如何在Java中实现Kerberos协议转换? (S4U2Self)

在Windows 10上运行时出现Blazegraph错误

当调用linux lubuntu上的任何java.nio方法时,不会面临这种方法exception

这是现在可以使用SWT请查看代码示例:

org.eclipse.swt.snippets.Snippet336

Java中没有这样的标准工具。

因此,您需要直接与Windows沟通才能做到这一点。 所以你需要找到正确的Windows例程,并使用JNA(可能是最简单的)来调用该例程。 我不知道谁已经做到这一点的供应商或项目。

编辑:看来, http : //code.google.com/p/nativelibs4java/项目可以做你想做的。

有一个Java库为Java提供了新的Windows 7功能。 它被称为Strix Code的J7Goodies 。 它可以让你显示任务栏进度条,做更多。

这个例子将完成这项工作:

任务栏:

码:

import org.bridj.Platform; import org.bridj.Pointer; import org.bridj.cpp.com.Comruntime; import org.bridj.cpp.com.shell.ITaskbarList3; import org.bridj.jawt.JAWTUtils; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.changelistner; import java.awt.event.ActionEvent; import java.awt.event.Actionlistner; public class TaskBarListDemo extends JFrame implements Actionlistner,changelistner { private ITaskbarList3 list; private JSlider slider; private Pointer<?> hwnd; private TaskBarListDemo() throws ClassNotFoundException { super("TaskbarList Demo (" + (Platform.is64Bits() ? "64 bits" : "32 bits") + ")"); list = Comruntime.newInstance(ITaskbarList3.class); getContentPane().add("Center",new JLabel("Hello Native Windows 7 World !")); Box Box = Box.createVerticalBox(); int min = 0; int max = 300; int val = (min + max / 2); slider = new JSlider(min,max,val); slider.addchangelistner(this); Box.add(slider); ButtonGroup group = new ButtonGroup(); for (ITaskbarList3.TbpFlag state : ITaskbarList3.TbpFlag.values()) { JRadioButton cb = new JRadioButton(state.name()); group.add(cb); cb.putClientProperty(ITaskbarList3.TbpFlag.class,state); cb.setSelected(state == ITaskbarList3.TbpFlag.TBPF_norMAL); cb.addActionlistner(this); Box.add(cb); } getContentPane().add("South",Box); } @Override protected void finalize() throws Throwable { super.finalize(); list.Release(); } public void setVisible(boolean visible) { super.setVisible(visible); long hwndVal = JAWTUtils.getNativePeerHandle(this); hwnd = Pointer.pointerToAddress(hwndVal); list.SetProgressValue((Pointer) hwnd,slider.getValue(),slider.getMaximum()); } @Override public void stateChanged(ChangeEvent actionEvent) { list.SetProgressValue((Pointer) hwnd,slider.getMaximum()); } @Override public void actionPerformed(ActionEvent actionEvent) { JRadioButton button = ((JRadioButton) actionEvent.getSource()); if (button.isSelected()) { ITaskbarList3.TbpFlag flag = (ITaskbarList3.TbpFlag) button.getClientProperty(ITaskbarList3.TbpFlag.class); list.SetProgressValue((Pointer) hwnd,slider.getMaximum()); list.SetProgressstate((Pointer) hwnd,flag); } } public static void main(String[] arguments) throws Exception { TaskBarListDemo f = new TaskBarListDemo(); f.setDefaultCloSEOperation(WindowConstants.EXIT_ON_CLOSE); f.pack(); f.setVisible(true); } }

Maven依赖:

<dependencies> <dependency> <groupId>com.nativelibs4java</groupId> <artifactId>bridj</artifactId> <version>LATEST</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>LATEST</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna-platform</artifactId> <version>LATEST</version> </dependency> </dependencies>

Windows通过COM公开这个。 我相信一个“扁平的DLL”调用对你来说会更容易,但是如果你能到达COM,你可以做到这一点。 COM接口是ITaskbarList3(也有一个ITaskbarList4,您可以使用它继承它。) http://msdn.microsoft.com/en-us/library/dd391692 (VS.85) .aspx文档。 SetProgressstate和SetProgressValue是你想要调用的方法。 状态正常(绿色),暂停(黄色),错误(红色),不确定(绿色)和无。 在MSDN页面上,一些社区的人添加了从VB和C#中调用这个COM组件的细节 – 这可能会帮助您找出Java所需的安装和拆卸。

VB6调用Windows7任务栏进度条的ITaskbarList3接口

VB6调用Windows7任务栏进度条的ITaskbarList3接口

如果说上次我发的那个直接调用R0函数的是鸡肋的话,这次这个就是有很好的实际应用的东西。
大家都知道COM接口,COM就是一个虚函数表指针,VB6虽然支持COM的thiscall调用,可必需通过引用,而如果一些COM接口没有给基于VB6的引用,那VB6就残了,比如IStream之类的,这次的ITaskbarList3也是一样。

我们先看看看一个COM接口在内存中的结构,这里我用VB6的方式写,大家理解起来会很简单。
如果我们声明一个变量,这个变量是一个COM对象,然后调用xx函数真正初始化了这个对象,COM指针就指向一个虚函数表,此时COM在Win32内存中是这样的,伪代码如下:
Type Com
Type IUnkNown
QueryInterface + 0
AddRef + 4
Release + 8
End Type
Function1 + 12
Function2 + 16
Function3 + 20
···
End Type
恩,可以理解为COM指针就是一个表的内存区域,然后这个内存区域里面就是这样一张虚函数表,调用时,编译器根据索引*4取得需要调用的虚函数的地址,然后进行调用。

我们再追寻下一个COM对象的诞生过程:
声明COM对象变量(x86下这是一个4字节的指针)
调用**函数初始化这个变量,**函数进行一个new class操作,IUnkNown引用+1,初始化class内的各种此对象需要内部变量之类的等等,这就是为什么call这个COM成员函数时需要压入COM指针,因为那就是一个伪class指针,记录了一些这个class需要使用的数据。
此时一个新的class数据被分配出来,建立虚函数表,把class的基地址写入4字节的程序内变量。
程序调用class的某个成员函数,根据虚函数表取到函数地址,压入class基地址,函数代码内从这个class提取相关变量等,执行代码。

我们再来看看一个COM函数的原形:
void test(int a,int b);
真正的原形是:
void test(this,int a,int b);
this即为class指针,这是对程序员不可见的。我们称此为thiscall,也就是stdcall的一个变种。(可以去看看cdecl、stdcall、thiscall的文章)

我随便找了一个程序,截取其调用一个COM成员函数时的代码:

好了,理解了这些基本的东西,我们就可以动手了。
ITaskbarList3这个COM对象的声明在Windows 7 SDK的Shobjidl.h文件中,C style如下:

    typedef struct ITaskbarList3Vtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in REFIID riid,/* [annotation][iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            __RPC__in ITaskbarList3 * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            __RPC__in ITaskbarList3 * This);
        
        HRESULT ( STDMETHODCALLTYPE *HrInit )( 
            __RPC__in ITaskbarList3 * This);
        
        HRESULT ( STDMETHODCALLTYPE *AddTab )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in HWND hwnd);
        
        HRESULT ( STDMETHODCALLTYPE *DeleteTab )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in HWND hwnd);
        
        HRESULT ( STDMETHODCALLTYPE *ActivateTab )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in HWND hwnd);
        
        HRESULT ( STDMETHODCALLTYPE *SetActiveAlt )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in HWND hwnd);
        
        HRESULT ( STDMETHODCALLTYPE *MarkFullscreenWindow )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in HWND hwnd,/* [in] */ BOOL fFullscreen);
        
        HRESULT ( STDMETHODCALLTYPE *SetProgressValue )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ ULONGLONG ullCompleted,/* [in] */ ULONGLONG ullTotal);
        
        HRESULT ( STDMETHODCALLTYPE *SetProgressstate )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ TBPFLAG tbpFlags);
        
        HRESULT ( STDMETHODCALLTYPE *RegisterTab )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in HWND hwndTab,/* [in] */ __RPC__in HWND hwndMDI);
        
        HRESULT ( STDMETHODCALLTYPE *UnregisterTab )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in HWND hwndTab);
        
        HRESULT ( STDMETHODCALLTYPE *SetTabOrder )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in HWND hwndInsertBefore);
        
        HRESULT ( STDMETHODCALLTYPE *SetTabActive )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in HWND hwndMDI,/* [in] */ DWORD dwReserved);
        
        HRESULT ( STDMETHODCALLTYPE *ThumbBaraddButtons )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ UINT cButtons,/* [size_is][in] */ __RPC__in_ecount_full(cButtons) LPTHUMBBUTTON pButton);
        
        HRESULT ( STDMETHODCALLTYPE *ThumbBarUpdateButtons )( 
            __RPC__in ITaskbarList3 * This,/* [size_is][in] */ __RPC__in_ecount_full(cButtons) LPTHUMBBUTTON pButton);
        
        HRESULT ( STDMETHODCALLTYPE *ThumbBarSetimageList )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in_opt HIMAGELIST himl);
        
        HRESULT ( STDMETHODCALLTYPE *SetoverlayIcon )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in HICON hIcon,/* [string][unique][in] */ __RPC__in_opt_string LPCWSTR pszDescription);
        
        HRESULT ( STDMETHODCALLTYPE *SetThumbnailTooltip )( 
            __RPC__in ITaskbarList3 * This,/* [string][unique][in] */ __RPC__in_opt_string LPCWSTR pszTip);
        
        HRESULT ( STDMETHODCALLTYPE *SetThumbnailClip )( 
            __RPC__in ITaskbarList3 * This,/* [in] */ __RPC__in RECT *prcclip);
        
        END_INTERFACE
    } ITaskbarList3Vtbl;
SetProgressValue为第10个函数,那函数地址就是(10-1)*4,为了更易懂,我们可以把一个COM函数的Vtbl列成VB6里面的Enum。
添加一个Module1,复制代码:
Private Declare Function CallWindowProcW& Lib "user32" (ByVal lpPrevWndFunc As Long,ByVal hWnd As Long,ByVal Msg As Long,ByVal wParam As Long,ByVal lParam As Long)
Private Declare Function LocalAlloc& Lib "kernel32" (ByVal f&,ByVal s&)
Private Declare Function LocalFree& Lib "kernel32" (ByVal m&)
Private Declare Sub PutMem1 Lib "msvbvm60" (ByVal Ptr As Long,ByVal NewVal As Byte)
Private Declare Sub PutMem2 Lib "msvbvm60" (ByVal Ptr As Long,ByVal NewVal As Integer)
Private Declare Sub PutMem4 Lib "msvbvm60" (ByVal Ptr As Long,ByVal NewVal As Long)
Private Declare Sub PutMem8 Lib "msvbvm60" (ByVal Ptr As Long,ByVal NewVal As Currency)
Public Function CallCOMInterface&(ByVal CComPtr&,ByVal dwMemberIndex&,ParamArray pparam())
Dim i%,offset&
Dim hMem&
hMem = LocalAlloc(0,((UBound(pParam) + 2) * 5) + 5 + 6 + 1) '//申请代码内存
offset = hMem
For i = UBound(pParam) To 0 Step -1 '//压入参数
PutMem1 offset,&H68 'push Param
offset = offset + 1
PutMem4 offset,pParam(i)
offset = offset + 4
Next
PutMem1 offset,&H68 'push COM point,压入COM指针
PutMem4 offset + 1,CComPtr
offset = offset + 5
PutMem1 offset,&HA1 'mov eax,dword ptr ds:CComPtr,eax=CComPtr指针第一个函数地址
PutMem4 offset + 1,&HFF 'call dword ptr ds:eax + dwMemberIndex * 4,根据Win32下COM表结构,一个函数地址长度4字节
PutMem1 offset + 1,&H90
PutMem4 offset + 2,dwMemberIndex * 4
offset = offset + 6
PutMem1 offset,&HC3 'retn
PutMem1 offset + 1,&H90 '//nop一行代码
CallCOMInterface = CallWindowProcW(hMem,0) 'call
LocalFree hMem '//释放内存
End Function
再添加一个Form1,一个Command1,复制代码:
Private i&
Private Enum ITaskbarList3
QueryInterface
AddRef
Release
'IUnkNown
HrInit
AddTab
DeleteTab
ActivateTab
SetActiveAlt
MarkFullscreenWindow
SetProgressValue
SetProgressstate
RegisterTab
UnregisterTab
SetTabOrder
SetTabActive
ThumbBaraddButtons
ThumbBarUpdateButtons
ThumbBarSetimageList
SetoverlayIcon
SetThumbnailTooltip
SetThumbnailClip
End Enum
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Private Declare Function IIDFromString& Lib "ole32 " (ByVal ID As Long,ByVal IDs As Long)
Private Declare Function CLSIDFromString& Lib "ole32 " (ByVal ID As Long,ByVal IDs As Long)
Private Declare Function CoCreateInstance& Lib "ole32 " (ByVal CLSID As Long,ByVal Outer As Long,ByVal Context As Long,ByVal IID As Long,Obj As Any)
Private Function CreateW7Task&()
Dim CID As GUID,IID As GUID,objW7Task&
CLSIDFromString StrPtr("{56FDF344-FD6D-11d0-958A-006097C9A090}"),VarPtr(CID)
IIDFromString StrPtr("{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}"),VarPtr(IID)
CoCreateInstance VarPtr(CID),1,VarPtr(IID),objW7Task
CreateW7Task = objW7Task
End Function

Private Sub Command1_Click()
Dim j&
For j = 0 To 10000
Me.Caption = CallCOMInterface(i,SetProgressValue,Me.hWnd,j,10000,0)
Next
End Sub

Private Sub Form_Load()
i = CreateW7Task
End Sub
点击Command1测试效果。 这代码就是根据ITaskbarList3的CLSID和IID通过CoCreateInstance创建出来一个COM对象指针,然后调用里面的虚函数,实现Windows7下任务栏进度条效果。 关于ITaskbarList3的其他函数说明自己看MSDN就行了,理解套用代码就一样调用,其他的COM接口也一样。比如什么XMLLite的那些东西。。。 有人会问,上面的SetProgressValue不是3个参数么,为什么我们调用的时候传入了5个参数?! 看原形,SetProgressValue是一个dword的hwnd,2个ULONGULONG的进度参数,ULONGULONG这个玩意是8字节,压栈的时候分2个4字节压,所以我们就写成了4个参数,也就是分开了。就像那个FILETIME差不多。再简单一点,一个ULONGULONG=2个ULONG=2个dword 好了、长篇大论就写到这里,撸管睡觉去。

Win7任务栏右下角提示未能连接一个windows服务修复方法

Win7任务栏右下角提示未能连接一个windows服务修复方法

原标题:"Win7任务栏右下角提示未能连接一个windows服务的解决方法"相关电脑问题教程分享。

Win7系统电脑任务栏右下角提示未能连接一个windows服务,这是怎么回事?Win7系统电脑不能上网,提示无法连接system event notifica service服务该如何解决?下面请看具体解决方法。

解决方法:

1、按下“Win + R”快捷键打开运行,输入“cmd”并点击确定进入命令提示符,输入“NETSH WINSOCK RESET CATALOG”命令,按下enter键执行;

2、再次打开运行,输入“services.msc”按下回车进入服务,重新启动“System event notification Service”服务;

3、如果提示出错,可以重新启动按F8进入安全模式,打开命令提示符,运行“NETSH WINSOCK RESET CATALOG”命令,然后重新启动System event notification 服务,显示系统恢复重启正常。

总结

以上是小编为你收集整理的Win7任务栏右下角提示未能连接一个windows服务修复方法全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

今天关于在PyQt中使用Windows 7任务栏功能的分享就到这里,希望大家有所收获,若想了解更多关于c# – Windows 7任务栏图标突出显示颜色、Java中的Windows 7任务栏进度条、VB6调用Windows7任务栏进度条的ITaskbarList3接口、Win7任务栏右下角提示未能连接一个windows服务修复方法等相关知识,可以在本站进行查询。

本文标签: