win32程序实现最小化到托盘

POINT pt; GetCursorPos(&pt);
SetForegroundWindow(m_hWnd); //右击后点别地可以清除“右击出来的菜单”

    HMENU hMenu; //托盘菜单    win32程序使用的是HMENU,如果是MFC程序可以使用CMenu
    hMenu = CreatePopupMenu();//生成托盘菜单   
    AppendMenu(hMenu, MF_STRING, WM_ONCLOSE, _T("退出"));  

    int cmd = TrackPopupMenu(hMenu, TPM_RETURNCMD, pt.x, pt.y, NULL, m_hWnd,  NULL);  
    if(cmd == WM_ONCLOSE)   
    {
        //退出程序
        m_nid.hIcon = NULL;
        Shell_NotifyIcon(NIM_DELETE, &m_nid);
        ::PostQuitMessage(0);
    }

范文泉 发布于 2025-09-28 14:05

生产中的序列号因php弱类型带来的问题

$a['modulesn'] = "0542509004725";  
$b = "00542509004725";

一个是 以 0 开头,另一个是 以 00 开头。
按理说用 != 应该返回 true(不相等),但你说结果是 false(相等)。

原因:PHP 的弱类型比较(类型转换问题)

在 PHP 里,!=、== 会触发 弱类型比较:
如果两个字符串看起来都是 数字字符串,PHP 会把它们转换成数字再比较。
"0542509004725" 和 "00542509004725" 都会被转换成 542509004725(整数)。
转换后它们相等,所以 != 返回 false。

验证

var_dump((int)"0542509004725");   // int(542509004725)
var_dump((int)"00542509004725");  // int(542509004725)

结果一样。

解决办法

如果你想比较字符串本身,而不是数值:

用 全等比较 !== 或 ===

var_dump($a['modulesn'] !== $b); // true

或者强制用 字符串比较函数

var_dump(strcmp($a['modulesn'], $b) !== 0); // true

建议:凡是涉及可能带前导 0 的数据(比如条码、序列号、工号),一定要用 === 来比较,不要用 == 或 !=。


范文泉 发布于 2025-09-11 15:20