api取图标句柄 为什么我娶不到呢?求助高手
api取图标句柄为什么我娶不到呢?求助高手问题见标题↑
代码如下
#Include <WinAPIEx.au3>
$sPath="F:\autoit3\AutoIt3Help.exe"
$sInfo="";none
$tSHFILEINFO = DllStructCreate($tagSHFILEINFO)
MsgBox("","",$tSHFILEINFO)
$ss = DllCall('shell32.dll', 'dword_ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword',128, 'ptr', $sInfo, 'uint', 384, 'uint', 256)
MsgBox("","",$ss)
$df=$sInfo.hIcon
MsgBox("","",$df)
求助#Include <WinAPIEx.au3>
$sPath="F:\autoit3\AutoIt3Help.exe"
$sInfo="";none
$tSHFILEINFO = DllStructCreate($tagSHFILEINFO)
MsgBox("","",$tSHFILEINFO)
$ss = DllCall('shell32.dll', 'dword_ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword',128, 'ptr', $sInfo, 'uint', 384, 'uint', 256)
MsgBox("","",$ss)
$df=$sInfo.hIcon
MsgBox("","",$df)
娶不到?
这个没人能帮到你 人家不肯嫁那也没办法
发API原型上来看看,没用过帮顶 .版本 2
.DLL命令 SHGetFileInfo, 整数型, , "SHGetFileInfo", 公开
.参数 pszPath, 文本型
.参数 dwFileAttributes, 整数型
.参数 psfi, SHFILEINFO
.参数 cbFileInfo, 整数型
.参数 uFlags, 整数型
.版本 2
.子程序 _按钮2_被单击
.局部变量 图标句柄, 整数型
.局部变量 sInfo, SHFILEINFO
.如果真 (通用对话框1.打开 ())
SHGetFileInfo (通用对话框1.文件名, 128, sInfo, 348, 256)
图标句柄 = sInfo.hIcon
图标句柄编辑框.内容 = 到文本 (图标句柄)
.如果真结束
.版本 2
.数据类型 SHFILEINFO, 公开
.成员 hIcon
.成员 iIcon
.成员 dwAttributes
.成员 szDisplayName, 字节型, , "256"
.成员 szTypeName, 字节型, , "80"
原型如上 ~~忘换马甲了。。。。。 DWORD WINAPI SHGetFileInfo(
LPCTSTR pszPath,
DWORD dwFileAttributes,
SHFILEINFO FAR *psfi,
UINT cbFileInfo,
UINT uFlags
在uFlages指定SHGFI_SYSICONINDEX or SHGFI_LARGEICON 回复 6# 专业的门外汉笨
写的这个和autoit有关系吗 /********************************************************************
created:2008/05/02
created:2:5:2008 3:40
main.cpp
author: Gohan
purpose:演示SHBrowseForFolder用法
演示SHGetFileInfo获取路径图标
演示Picture Box在SDK里的使用方法
*********************************************************************/
#include <Windows.h>
#include <ShlObj.h>
#include "resource.h"
HICON g_icon;
RECT g_rect;
TCHAR g_path;
void OnInitDlg(HWND hwnd)
{
GetWindowRect(GetDlgItem(hwnd, IDC_ICON1), &g_rect);
MapWindowPoints(NULL, hwnd, (LPPOINT) &g_rect, 2);
DestroyWindow(GetDlgItem(hwnd, IDC_ICON1));
SetDlgItemText(hwnd,IDC_PATH,g_path);
}
void OnPaint(HWND hwnd)
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
DrawIcon(hdc,g_rect.left,g_rect.left,g_icon);
EndPaint(hwnd,&ps);
}
BOOL CALLBACK DlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG :
OnInitDlg(hDlg);
return TRUE ;
case WM_PAINT:
OnPaint(hDlg);
return TRUE;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
case IDCANCEL :
EndDialog (hDlg, 0) ;
return TRUE ;
}
break ;
}
return FALSE ;
}
int main()
{
HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
BROWSEINFO bi;
ZeroMemory(&bi,sizeof(BROWSEINFO));
LPMALLOC pMalloc;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if(pidl != NULL)
{
SHGetPathFromIDList(pidl,g_path);
SHFILEINFO sfi;
ZeroMemory(&sfi,sizeof(SHFILEINFO));
SHGetFileInfo(g_path,0,&sfi,sizeof(SHFILEINFO),SHGFI_ICON);
g_icon = sfi.hIcon;
DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, DlgProc) ;
//MessageBox(NULL,path,TEXT("Choose"),MB_OK);
if(SUCCEEDED(SHGetMalloc(&pMalloc)))
{
pMalloc->Free(pidl);
pMalloc->Release();
}
}
else
{
MessageBox(NULL,TEXT("),TEXT("Choose"),MB_OK);
}
}
/************************************************************************/
/* resource.h */
/************************************************************************/
#define IDD_DIALOG1 101
#define IDC_PATH 1001
#define IDC_ICON1 1002
/************************************************************************/
/* demo.rc Microsoft Visual C++ generated resource script. */
/************************************************************************/
#include "resource.h"
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_DIALOG1 DIALOGEX 0, 0, 126, 83
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "确定",IDOK,69,7,50,14
PUSHBUTTON "取消",IDCANCEL,69,24,50,14
CONTROL "",IDC_ICON1,"Static",SS_WHITEFRAME | SS_REALSIZEIMAGE,13,10,20,20,WS_EX_TRANSPARENT
LTEXT "静态",IDC_PATH,14,44,89,21,0,WS_EX_CLIENTEDGE
END 可采取两种方法:
(1) SDK函数SHGetFileInfo或使用ExtractIcon获得图标资源的
handle,
(2) SDK函数SHGetFileInfo获得有关文件的很多信息,如大小图标,属
性,
类型等.
Example(1):在程序窗口左上角显示NotePad图标.
void CSampleView: OnDraw(CDC * pDC)
{
if( :: SHGetFileInfo(_T( "c:\\pwin95\\notepad.exe "),0,
&stFileInfo,sizeof(stFileInfo),SHGFI_ICON))
{
pDC -> DrawIcon(10,10,stFileInfo.hIcon);
}
}
Example(2):同样功能,Use ExtractIcon Function
void CSampleView:: OnDraw(CDC *pDC)
{
HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T
( "NotePad.exe "),0);
if (hIcon &&hIcon!=(HICON)-1)
pDC-> DrawIcon(10,10,hIcon);
}
说明:获得notepad.exe的路径正规上来说用GetWindowsDirectory函数
得到,
如果是调用win95下的画笔,应该用访问注册表的方法获得其路径,要
作成一个
比较考究的程序,考虑应该全面点. 本帖最后由 netegg 于 2012-3-28 08:49 编辑
回复 9# 专业的门外汉笨
你真有点过了,想学c的话,何必到这里来
你要是真觉得自己的学问到家了,逐句改成能运行的auto来倒是真的 本帖最后由 netegg 于 2012-3-28 09:27 编辑
回复 1# au3fan
$sPath=@ProgramFilesDir & "\autoit3\AutoIt3Help.exe"
$tSHFILEINFO = DllStructCreate($tagSHFILEINFO)
$ss = _WinAPI_ShellGetFileInfo( $sPath, $SHGFI_ICON, $FILE_ATTRIBUTE_NORMAL, $tSHFILEINFO)
if $ss then $df = DllStructGetData($tSHFILEINFO, 'hIcon')
MsgBox("","",$df) 本帖最后由 netegg 于 2012-3-28 09:34 编辑
'ptr', $sInfo
楼主注意下,这个参数指明是要指针,你摆个字符串上去干什么
Global Const $tagSHFILEINFO = 'ptr hIcon;int iIcon;dword Attributes;wchar DisplayName;wchar TypeName;'
要放字符串,也要放到结构里,不能直接用到这个api里 用那么多马甲号干什么?
提问题又不丢人.
Local $tSHFILEINFO = DllStructCreate("ptr hIcon; int iIcon; dword dwAttributes; wchar szDisplayName; wchar szTypeName")
Local $Ret = DllCall('shell32.dll', 'ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword', 0x80, 'ptr', DllStructGetPtr($tSHFILEINFO), 'int', DllStructGetSize($tSHFILEINFO), 'int', 0x100)
Local $hicon = DllStructGetData($tSHFILEINFO, 'hIcon')
MsgBox(0,0,$hicon) 用那么多马甲号干什么?
提问题又不丢人.
3mile 发表于 2012-3-28 09:33 http://www.autoitx.com/images/common/back.gif
:face (24):三笑惊了 用那么多马甲号干什么?
提问题又不丢人.
3mile 发表于 2012-3-28 09:33 http://www.autoitx.com/images/common/back.gif
楼主是怕万一一时脑子短路,提了一个小白问题
笑……%
是不是我也来注册个马甲穿穿呀
页:
[1]