无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
12
返回列表 发新帖
楼主: mdyblog
打印 上一主题 下一主题

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

    [复制链接]
31#
发表于 2023-4-28 15:24:14 | 显示全部楼层
//注意 Image1是个EXE的图标 加载会卡 详见https://pecmd.net/thread-522.htm

IMAG Image1,L6T422W73H73,%MyName%,call ico,
CALL setSOURCE

_SUB setSOURCE
        FORX * &L8 &L9,i,
        {*        FNAM-ext &tmpNAME=%&fir%
                FIND $%&tmpNAME%=,ENVI &fir=
                ENVI @%i%.SEL=%&fir%
                ^FIND $%%%i%%%<>%%&fir%%,ENVI @%i%.ADDSEL=%&fir%       
                FIND $%i%=&L8,TEAM WAIT 555|ENVI @Image1.update=:::::;%&fir%#0       
        }
_END

点评

贴一个最小能重现问题的代码呗。 你这代码也不知道怎么玩  详情 回复 发表于 2023-4-28 15:45
回复

使用道具 举报

32#
发表于 2023-4-29 06:06:55 | 显示全部楼层
写个桌面可以移动插件,该插件被限制在屏幕的最上方,可左右拖拽移动,无法上下移动,拖拽下拉该控件有回弹的效果,松开可以切换壁纸。右键点击该插件可以弹出菜单。
以下是基本的C++程序代码思路和一些需要用到的API函数 可以翻译下吗

  1. 1. 定义控件的初位置和大小,设置控件可以接受鼠标消息。

  2. ```
  3. HWND hWnd = CreateWindowEx(WS_EX_TRANSPARENT, L"STATIC", L"", WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | SS_BITMAP, xPos, yPos, width, height, parentHwnd, NULL, hInstance, NULL);
  4. SetWindowLongPtr(hWnd, GWL_STYLE, GetWindowLongPtr(hWnd, GWL_STYLE) | WS_EX_ACCEPTFILES);
  5. ```

  6. 2. 实现鼠标拖拽和回弹的效果。需要用到以下函数:GetCursorPos、SetCursorPos、ScreenToClient、ClientToScreen、SendMessage、ReleaseCapture。

  7. ```
  8. case WM_LBUTTONDOWN:
  9. {
  10.     ReleaseCapture();
  11.     POINT cursorPos;
  12.     GetCursorPos(&cursorPos);
  13.     ScreenToClient(hWnd, &cursorPos);
  14.     SetCursorPos(cursorPos.x, cursorPos.y);
  15.     m_bDragging = true;
  16.     m_ptStartPos = cursorPos;
  17.     break;
  18. }
  19. case WM_MOUSEMOVE:
  20. {
  21.     if (m_bDragging)
  22.     {
  23.         POINT cursorPos;
  24.         GetCursorPos(&cursorPos);
  25.         ScreenToClient(hWnd, &cursorPos);

  26.         int delta = cursorPos.x - m_ptStartPos.x;
  27.         int xPos = m_ptStartPos.x + delta;
  28.         xPos = max(xPos, 0);
  29.         RECT rcParent;
  30.         GetClientRect(GetParent(hWnd), &rcParent);
  31.         xPos = min(xPos, rcParent.right - m_width);

  32.         SetWindowPos(hWnd, NULL, xPos, m_yPos, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER);

  33.         m_ptLastPos = cursorPos;
  34.     }
  35.     break;
  36. }
  37. case WM_LBUTTONUP:
  38. {
  39.     if (m_bDragging)
  40.     {
  41.         m_bDragging = false;
  42.         if (m_ptLastPos.x < m_ptStartPos.x)
  43.         {
  44.             SendMessage(hWnd, WM_MOVE, 0, MAKELPARAM(0, m_yPos));
  45.         }
  46.         else if (m_ptLastPos.x > m_ptStartPos.x)
  47.         {
  48.             SendMessage(hWnd, WM_MOVE, 0, MAKELPARAM(rcParent.right - m_width, m_yPos));
  49.         }
  50.     }
  51.     break;
  52. }
  53. ```

  54. 3. 实现切换壁纸的功能,需要用到以下函数:SystemParametersInfo。

  55. ```
  56. case WM_LBUTTONUP:
  57. {
  58.     if (m_bDragging)
  59.     {
  60.         // ...

  61.         // 切换壁纸
  62.         m_bmpIndex = (m_bmpIndex + 1) % m_bmpList.size();
  63.         SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID)m_bmpList[m_bmpIndex].c_str(), SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);

  64.         break;
  65.     }
  66. }
  67. ```

  68. 4. 实现右键菜单的弹出,需要用到以下函数:CreatePopupMenu、AppendMenu、TrackPopupMenu、DestroyMenu。

  69. ```
  70. case WM_CONTEXTMENU:
  71. {
  72.     HMENU hPopupMenu = CreatePopupMenu();
  73.     AppendMenu(hPopupMenu, MF_STRING, ID_MENU_ITEM1, L"菜单项1");
  74.     AppendMenu(hPopupMenu, MF_STRING, ID_MENU_ITEM2, L"菜单项2");
  75.     AppendMenu(hPopupMenu, MF_STRING, ID_MENU_ITEM3, L"菜单项3");
  76.     TrackPopupMenu(hPopupMenu, TPM_TOPALIGN | TPM_LEFTALIGN, ptCursor.x, ptCursor.y, 0, hWnd, NULL);
  77.     DestroyMenu(hPopupMenu);

  78.     break;
  79. }
  80. ```
复制代码

点评

回弹自己写定时器缓慢移动控件即可 右键更简单,pecmd示例就有  详情 回复 发表于 2023-4-30 11:40
这很简单  详情 回复 发表于 2023-4-30 10:50
回复

使用道具 举报

33#
发表于 2023-4-29 06:12:44 | 显示全部楼层

点评

_SUB WIN1,W633H344,新窗口1,,,-#: SWIN -:SWIN1,L123T50W30H30,, _END win1 _sub swin1,w30h30,,,,: IMAG IMAG1,L0T0W30H30,#1, ENVI @SWIN1.HitTest=30:30 envI @sWIN1.MSG=0x0232::&&wp,  详情 回复 发表于 2023-4-30 11:02
回复

使用道具 举报

34#
发表于 2023-4-29 20:39:07 | 显示全部楼层
了凡Win11_22624.1680_PE链接:https://share.weiyun.com/USJIeYYn 密码:qi8fk6
回复

使用道具 举报

35#
发表于 2023-4-30 11:42:51 | 显示全部楼层
很久以前用写小米主题锁屏时一个音乐进度 使用的是蒙版 PECMD对图片展示锯齿太多 旋转估计更多
<Image src="player_dian.png" x="#screen_width/2" y="162" angle="#music_control.music_position/#music_control.music_duration*360" align="center" alignV="center" centerX="28" centerY="128"/>
回复

使用道具 举报

36#
发表于 2023-4-30 11:48:06 | 显示全部楼层
<!--以下是用圆环中的一部分做为电量进度动画效果 也需要蒙版->
<Text x="557" y="125" color="#000000" size="26" format="%d%%" paras="#battery_level" align="center" alignV="center"/>
<Image x="418" y="280" align="center" alignV="center" src="battery_bg.webp"/>
<Image x="418" y="280" align="center" alignV="center" srcExp="'battery'+#Color_id+'.webp">
<Mask w="213" h="426" src="wave_9.webp" pivotX="213" pivotY="213"   rotation="ifelse(eq(1,#battery_state),#angle0,min(#battery_level,100)/100*140+70)"/>
</Image>
回复

使用道具 举报

37#
发表于 2023-4-30 14:52:14 | 显示全部楼层
还有很大差距 还不如固定在那
  1. team ENVI &::WM_TRAYNOTIFY=1109|SET  ::WM_RBUTTONDOWN=0x0204|SCRN &ScrW,&ScrH|CALC &L=%&ScrW%*0.618|CALL @WIN1
  2. _SUB WIN1,L0T0W%&ScrW%H100,挂件,,,#-:,,%&ScaleCMD%
  3.         ENVI @this.MSG=_%&::WM_TRAYNOTIFY%::&&wp,&&lp,CALL DoMenu2 %&wp% %&lp%
  4.         SWIN -:SWIN1,L%&L%T0W32H68,,
  5.         TIPS* ,挂件,,,%小标%
  6. _END

  7. _sub swin1,W32H68,,,,:
  8.         IMAG MyCtr01,L0T0W32H68,#1,
  9.         ENVI @SWIN1.HitTest=32:68
  10.         envI @sWIN1.MSG=0x0232::&&wp,&&lp, team envI @swin1.POS=?左:上|envI @swin1.POS=%左%:0|了然 壁纸
  11. _END

  12. _SUB DoMenu2
  13.         IFEX $%&::WM_RBUTTONDOWN%=%2,CALL @--popmenu RMenu2
  14. _END

  15. _SUB RMenu2
  16.         MENU ,退出,KILL \,,??SHELL32.dll#27
  17. _END
复制代码

点评

什么差距,不能拖吗  详情 回复 发表于 2023-4-30 17:50
回复

使用道具 举报

38#
发表于 2023-5-5 08:12:51 | 显示全部楼层
  1. CALL MAIN
  2. _SUB MAIN,W500H400,部分图片,,%&MyName%,,
  3.     IMAG IMAG1,L0T68W105H92,<img><size:700><color:0xFFFFFF><font:385:Segoe Fluent Icons**###0>\uEDAB,MESS 369
  4.     IMAG IMAG2,L0T68W105H92,<img><size:700><color:0xFF00FF><font:385:Segoe Fluent Icons**###0>\uEDAB,MESS 369
  5.     ENVI @IMAG2.Visable=0           
  6.         ENVI @IMAG1.MSG=0x1000:TEAM ENVI @IMAG1.Visable=0|ENVI @IMAG2.Visable=1
  7.         ENVI @IMAG2.MSG=0x02A3:TEAM ENVI @IMAG2.Visable=0|ENVI @IMAG1.Visable=1
  8. _END
复制代码
回复

使用道具 举报

39#
发表于 2023-5-5 08:18:39 | 显示全部楼层
CALL MAIN
_SUB MAIN,W500H400,部分图片,,%&MyName%,,
    IMAG IMAG1,L0T68W105H92,<img><size:700><color:0xFFFFFF><font:385:Segoe Fluent Icons**###0>\uEDAB,MESS 369
    IMAG IMAG2,L0T68W105H92,<img><size:700><color:0xFF00FF><font:385:Segoe Fluent Icons**###0>\uEDAB,MESS 369,,-16  
        ENVI @IMAG1.MSG=0x1000:TEAM ENVI @IMAG1.Visable=0|ENVI @IMAG2.Visable=1
        ENVI @IMAG2.MSG=0x02A3:TEAM ENVI @IMAG2.Visable=0|ENVI @IMAG1.Visable=1
_END
回复

使用道具 举报

40#
发表于 2023-5-5 09:09:07 | 显示全部楼层
M大闭关修行物我两忘,不知今夕是何年
回复

使用道具 举报

41#
发表于 2023-5-6 16:33:34 | 显示全部楼层
  1. #code=936T950
  2. set^ EnviMode=1
  3. set^ ForceLocal=1
  4. set wm_traynotify=1109
  5. set wm_lbuttondown=0x0201
  6. set wm_rbuttondown=0x0204

  7. call @WinM

  8. _sub WinM,W320H280,,,,#-:,,
  9.         set @this.msg=_%wm_traynotify%::wp,lp, call DoMenu %wp% %lp%
  10.         IMAG MyCtr01,L0T0W68H68,#1
  11.        
  12.         tips* test,,,,shell32.dll#94
  13. _end

  14. _sub DoMenu
  15. //怎样点左键显示窗口呢??
  16.         ifex $%wm_lbuttondown%=%2, envi @WinM.Visable=*3     //3最大化 4最小化
  17.         ifex $%wm_rbuttondown%=%2, call @--popmenu MyMenu1
  18. _end

  19. _sub MyMenu1
  20.         menu ,Help,Help
  21.         menu -
  22.         menu ,exit,kill \
  23. _end
复制代码

点评

不知道你要的是不是这个效果。  详情 回复 发表于 2023-5-6 16:47
回复

使用道具 举报

42#
发表于 2023-5-6 17:09:57 | 显示全部楼层
我这号无法引用回复,我只是想要

如果点右下显示桌面 这个挂件就没了 左键点击能出来和QQ等其它软件一样
PECMD只能点其它软件任务框 顺带出来 这逻辑弄的好奇怪的

点评

没有标题的窗口,好像都这样子的吧。  详情 回复 发表于 2023-5-6 21:17
回复

使用道具 举报

43#
发表于 2023-5-6 17:12:11 | 显示全部楼层
打开这个窗口 点右下角显示桌面 再点任务栏左键 它不出来
回复

使用道具 举报

44#
发表于 2023-6-23 10:10:45 | 显示全部楼层
  1. M大能不能加入
  2. forx*d forx*r 如同cmd中的for /d和for /r
  3. 因为如果使用 forx /s 会含隐藏文件 而根据帮助也没找到过滤隐藏文件的方法
  4. 只能用dir i /s/a-h 再使用FORX*NL i,j这样过滤很不nice
复制代码
回复

使用道具 举报

45#
发表于 2023-7-20 11:44:01 | 显示全部楼层
怎样获取UPX实时进度呢 能多给个例子吗
经实验不能实时输出信息。 而是到最后才一次输出全部信息。
  1. EXEC*- -cmd::200:ImagexExemsg -nowait -err+ &vMSG=!cmd "/c upx.exe --ultra-brute ResHacker.exe --output=ResHacker_002.exe"
复制代码

点评

_SUB ImagexExemsg _END 在这里函数里应该是实时的吧  详情 回复 发表于 2023-7-21 02:24
应该是无解,EXEC* 是强制运行完才返回信息的  详情 回复 发表于 2023-7-20 23:00
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-8 15:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表