SyntaxHighlighter

ラベル windows の投稿を表示しています。 すべての投稿を表示
ラベル windows の投稿を表示しています。 すべての投稿を表示

2021-12-23

[C#][Windows] MessageBox中に改行処理

仕事メモです。

Windowsプログラミングによく使用するMessageBox。大量の内容を見せやすくするには改行が必要不可欠です。

いちいちCrLfを追加するのが面倒くさいので、より分かりやすくなる名前はC#内にあるようです。

Environment.NewLine

上記の意味ある内部変数を使ったらいいです。将来LinuxやMacに変更しても同じもので対応可能。通常のCrLfはWindowsのみであり、OSによる覚え間違いは減りますが、長い英単語を覚える方が逆に難しい…なんです。

2019-12-09

WPFでEFオブジェクトにData Bindingする場合の4t自動設定

WPFコントロールに自動的にBindingする場合、
デフォルトの4Tフレームワークで生成するファイルに少しだけの変更を入れると、あとはいつもの通りに任せきりにします。

内容はMSDNの公式文書からの抜粋で、私なりに必要な部分だけ取り出しました。

まず、適用する環境は次の通り:

  • Visual Studio Express 2017 for Windows Desktop
  • SQL Server Express 2017(大事でないけど、一応記録しておく。)
  • EF 6.0
  • WPF 3.0以上
そして、使用する手法はDatabase Firstで、ある程度データベースに保存するデータの形はDBですでに定義している前提で進みます。

ちなみに、MSDN公式は次の通り
MSDN公式を閲覧した時点では内容めちゃくちゃなので、蛇足ですが私なりに訳しておきました。
https://hackmd.io/@rokashou/rkSHqVM2H

カギになる設定の部分を抜粋:

  • ソリューションエクスプローラーを開き、edmxファイルの下にあるttファイル探します。編集としてファイルを開けます。
  • 二箇所にある「ICollection」を「ObservableCollection」へ置き換えます。それぞれは約296行目と484行目あたりにあります。
  • 最初に出た「HashSet」を見つけて「ObservableCollection」に置き換えます。 それは約50行目にあります。コードの後半にある2番目のHashSetを置き換えないでください
  • 一回だけある「System.Collections.Generic」を検索し、「System.Collections.ObjectModel」に置き換えます。 それは約424行目にあります。
  • .ttファイルを保存します。 これにより、エンティティのコードが再生成されます。 コードが自動的に再生成されない場合は、.ttファイルを右クリックして、「カスタムツールの実行」を選択します。

以上。

あとは普通にプログラムを組んでください。
ちょっと前のやつにはいろいろ不具合があるようで、見つけた次第にエラーでないように更新していく…



2019-06-21

認証プロキシ非対応アプリケーションを、認証プロキシ環境下で動かす方法

いやー、非常に助かります。


仕事上でVS Expressを入れたいのに、会社の環境でproxyが設定されて、何回か試しても公式サイトにつながらないので、いろいろ探した末に、この方法にたどり着いた。


カギになる部分だけを記録しておく:
1. Fiddlerをダウンロードし、インストール。最新版ではFiddlerScriptも同梱しているので、特に分けて設置する必要はありません。
2. IEで任意のウェブサイトを閲覧し、通信を行う。
3. Fiddlerのinspectorsで、Headers中のProxy-Authorizationのtokenを取得(前提条件はその合法的なtokenを取得できることですが…
4. FiddlerScriptを編集し、onBeforeRequestの中に、最後に上記のProxy-Authorizationを注入。
oSession.oRequest["Proxy-Authorization"]="TOKEN";
5. Script保存して完了!


ちなみに、使用するアプリケーションはフリーで、商用利用不可とは書いてません。


参考になったサイトは次の通り
https://qiita.com/Nuits/items/1bd84b45b0b092527d8d


無事に設定して、現在VS Expressをダウンロード中。。。


では、また今度~~


そろそろネットワークについて勉強しないとなぁ。

2018-07-23

代替小畫家的免費繪圖軟體

小畫家殺手...有點言過於實了,畢竟小畫家太弱XD
Windows馴染みのペイントの代わりですが、私がよく使っている方をお紹介します。

1. GIMP https://www.gimp.org/
最強殺手,以前是號稱推倒Photoshop...
昔からフリーウェアなので使っていますが、「オープンソース界のPhotoshop」と言われるほど有名だと思います。

2.Krita https://krita.org/zh/
開源版的 illustrators,向量圖就靠它了。
新たに紹介された「オープンソース界のillustrators」です。ベクター画像の編集にはこっちのほうが向いています。
3.Inkscape https://inkscape.org/zh-hant/
其實講到開源的向量圖軟體,在下對這個軟體比較耳熟能詳。網路上的比較也比Krita好得多,只能說可能是因為針對中文用戶的支援太少,導致其在華文世界的評價不是很高。
正直こっちのほうが僕にとってのオープンソース界のillustratorsですが、なぜか他のサイトでは上のKritaが紹介された。まぁ、アジア系のサポートが悪いのかな?

4. Paint .NET https://www.getpaint.net/
操作上最接近原來的小畫家。缺點是只能在Windows上用。
画面と操作にはWindowsのペイントに一番近いですが、残念ながらWindowsしか使えません(.NET Frameworkを使うので)。

2018-03-31

VBE6EXT.OLB無法載入

今天Solidworks開啟時發生一個問題
「VBE6EXT.OLD無法載入」

問題其實影響很大,會讓後續開啟小窗格要修正尺寸的時候一直警報不讓你改。
(聽說不只Solidworks, AutoCAD也會有類似的狀況)


主要原因是Windows的登錄檔不知什麼原因將VBA 6.0的登錄刪掉了。
VBE6EXT.OLD檔案本身應該還在下面的目錄中

C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB

稍微搜尋了一下解決方法,網路上很多把這個X86的DLL轉貼到VBA7.1的目錄裡面的做法,那並不是正道。正確的應該是像https://forum.solidworks.com/thread/40593中Luke Malpass前輩的做法,另外將VBAE6EXT.OLB這個檔案登錄回去。

登錄碼如下:

[HKEY_CLASSES_ROOT\TypeLib\{0002E157-0000-0000-C000-000000000046}]

[HKEY_CLASSES_ROOT\TypeLib\{0002E157-0000-0000-C000-000000000046}\5.3]
"PrimaryInteropAssemblyName"="Microsoft.Vbe.Interop, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"
@="Microsoft Visual Basic for Applications Extensibility 5.3"

[HKEY_CLASSES_ROOT\TypeLib\{0002E157-0000-0000-C000-000000000046}\5.3\0]

[HKEY_CLASSES_ROOT\TypeLib\{0002E157-0000-0000-C000-000000000046}\5.3\0\win32]
@="C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"

[HKEY_CLASSES_ROOT\TypeLib\{0002E157-0000-0000-C000-000000000046}\5.3\FLAGS]
@="0"

[HKEY_CLASSES_ROOT\TypeLib\{0002E157-0000-0000-C000-000000000046}\5.3\HELPDIR]
@="[{0002E157-0000-0000-C000-000000000046}]"

或者是直接下載論壇上的附檔
https://forum.solidworks.com/servlet/JiveServlet/download/204911-63820/reg.reg.zip

以上

2018-03-26

Solidworks解決雙點無法直接開啟問題

又是一個困擾我已久的問題
從Windows 10開始,灌完Solidworks之後,總是無法直接從檔案總管打開文件。

找了一下之後,發現有不少人遇到同樣的問題。試了一下網友提供的解法,嘿,還真解決了。

快速筆記如下:
1. 以「系統管理員身分」開啟Solidworks
進設定->系統選項->檔案Explorer
點擊「還原檔案關聯

2. 以「系統管理員身分」開啟命令提示字元(cmd)

輸入以下指令重新註冊DLL檔(記得先確認DLL檔位置)
regsvr32 "D:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\sldthumbnailprovider.dll"
regsvr32 "C:\Program Files\Common Files\SOLIDWORKS Shared\sldwinshellextu.dll"
3. 再次從檔案總管確認預設開啟程式。應該要是"SOLIDWORKS Launcher"

以上,解決。

參考資料:http://solidworks.org.tw/forum.php?mod=viewthread&tid=25495

2015-05-19

VirtualBox Guest OS Serial Port Setting

又是公司的電腦

急著要用舊型Win95/98se要連結Serial Port
設定了半天沒弄好,找了一下,參考一下下面的網站,設定Win98及序列埠的設定

Windows 98SE step by step
How to Add a Serial Port in XP and Win7 Guest.


簡單的說,Host端必須要先有一個可以連結的COM Port
例如說,COM1

然後照下面設定
連接埠號: COM1
連接埠模式: 主機裝置
連接埠/檔案路徑: COM1:
最後的冒號很重要,一定要打,不然就會像我一樣設半天連不上

Guest端可能不會自動偵測到,要自己手動加裝置

至於主端是Unix系的,請另外找吧XD

2014-06-02

Windows 7 "No Preview" Problem

職場で出会った問題です。

会社のパソコンが最近ちょこちょこと更新されて、
ウィンドウズエクスプローラにファイルの縮小版が表示しなくなった問題が発生している。

いろいろ調べたが、肝心な
フォルダー オプション→表示→「常にアイコンを表示し、縮小版は表示しない」というオプションが消えていることに気づいた。

更に調べたところ、レジストリに要らないものが書き込まれているからそれが起こったことがわかった。


コマンドラインにregeditを打ってレジストリエディタを立ち上げて、
次のキー値を探して
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer]
その中のDisableThumbnailsの値を1から0に変更して
リセット(再起動)してから、上記の肝心なフォルダーオプションが再び姿をみせる。

ちなみに、ネットドライブのファイルの縮小版も見たい場合、上記キー値の中にあるDisableThumbnailsOnNetworkの値も1から0に変更することを忘れずに。


探すのが面倒くさいと思う方、次の内容をfixPreview.regとして保存して、実行して自分のレジストリを修正してください。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer]
"DisableThumbnails"=0
"DisableThumbnailsOnNetwork"=0



2014-05-19

Autodesk Product Activation error 0015.111

最近遇到的新問題

當安裝Autodesk產品的時候,如果在安裝過程之中導入SP
會導致後來的啟用被阻止...

想也知道,因為啟用的內容被Autodesk擋掉了咩...
網路上有破解法跳出來了。這也解決了每次裝新產品就要全部移除乾淨的問題

安裝完之後,在以下的共用資料夾中的adlmact.dll與adlmact_libFNP.dll這兩個檔案會被更新為最新的狀態
C:\Program Files\Common Files\Autodesk Shared\AdLM\R7

解決之道就是去把安裝資料夾中原本的這兩個檔案找出來貼上去覆蓋掉新檔,那麼原本的Crack也就又重新可以用了。

Jesus! 這真是太神奇了。

來源出處:http://forum.cgpersia.com/f19/autodesk-activation-error-015-111-anywhere-solution-xforce-keygen-82930/#ixzz2sIF6Qh4Q

2013-10-28

[C#]Centering a Message Box on the Active Window

There are 2 way to centering the default MessageBox
or said, 1 only way, and 2 kind of Invoking.

1. Make a new WindowForm who has centerParent Location, then copy it's location to the MessageBox by "Hook" the system dialog's location.
2. Just Hook the system dialog's location and set it before call MessageBox.Show()

Way 1: CenterWinDialog by Hans Passant

There's the code(class CenterWinDialog):
using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class CenterWinDialog : IDisposable {
    private int mTries = 0;
    private Form mOwner;

    public CenterWinDialog(Form owner) {
        mOwner = owner;
        owner.BeginInvoke(new MethodInvoker(findDialog));
    }

    private void findDialog() {
        // Enumerate windows to find the message box
        if (mTries < 0) return;
        EnumThreadWndProc callback = new EnumThreadWndProc(checkWindow);
        if (EnumThreadWindows(GetCurrentThreadId(), callback, IntPtr.Zero)) {
            if (++mTries < 10) mOwner.BeginInvoke(new MethodInvoker(findDialog));
        }
    }
    private bool checkWindow(IntPtr hWnd, IntPtr lp) {
        // Checks if <hwnd> is a dialog
        StringBuilder sb = new StringBuilder(260);
        GetClassName(hWnd, sb, sb.Capacity);
        if (sb.ToString() != "#32770") return true;
        // Got it
        Rectangle frmRect = new Rectangle(mOwner.Location, mOwner.Size);
        RECT dlgRect;
        GetWindowRect(hWnd, out dlgRect);
        MoveWindow(hWnd,
            frmRect.Left + (frmRect.Width - dlgRect.Right + dlgRect.Left) / 2,
            frmRect.Top + (frmRect.Height - dlgRect.Bottom + dlgRect.Top) / 2,
            dlgRect.Right - dlgRect.Left,
            dlgRect.Bottom - dlgRect.Top, true);
        return false;
    }
    public void Dispose() {
        mTries = -1;
    }

    // P/Invoke declarations
    private delegate bool EnumThreadWndProc(IntPtr hWnd, IntPtr lp);
    [DllImport("user32.dll")]
    private static extern bool EnumThreadWindows(int tid, EnumThreadWndProc callback, IntPtr lp);
    [DllImport("kernel32.dll")]
    private static extern int GetCurrentThreadId();
    [DllImport("user32.dll")]
    private static extern int GetClassName(IntPtr hWnd, StringBuilder buffer, int buflen);
    [DllImport("user32.dll")]
    private static extern bool GetWindowRect(IntPtr hWnd, out RECT rc);
    [DllImport("user32.dll")]
    private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int w, int h, bool repaint);
    private struct RECT { public int Left; public int Top; public int Right; public int Bottom; }
}

Usage:
    private void button1_Click(object sender, EventArgs e) {
        using (new CenterWinDialog(this)) {
            MessageBox.Show("Nobugz waz here");
        }
    }


Way 2: MessageBoxHelper by Jason Carr

There's the code(class MessageBoxHelper):
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

internal static class MessageBoxHelper
{
    internal static void PrepToCenterMessageBoxOnForm(Form form)
    {
        MessageBoxCenterHelper helper = new MessageBoxCenterHelper();
        helper.Prep(form);
    }

    private class MessageBoxCenterHelper
    {
        private int messageHook;
        private IntPtr parentFormHandle;

        public void Prep(Form form)
        {
            NativeMethods.CenterMessageCallBackDelegate callBackDelegate = new NativeMethods.CenterMessageCallBackDelegate(CenterMessageCallBack);
            GCHandle.Alloc(callBackDelegate);

            parentFormHandle = form.Handle;
            messageHook = NativeMethods.SetWindowsHookEx(5, callBackDelegate, new IntPtr(NativeMethods.GetWindowLong(parentFormHandle, -6)), NativeMethods.GetCurrentThreadId()).ToInt32();
        }

        private int CenterMessageCallBack(int message, int wParam, int lParam)
        {
            NativeMethods.RECT formRect;
            NativeMethods.RECT messageBoxRect;
            int xPos;
            int yPos;

            if (message == 5)
            {
                NativeMethods.GetWindowRect(parentFormHandle, out formRect);
                NativeMethods.GetWindowRect(new IntPtr(wParam), out messageBoxRect);

                xPos = (int)((formRect.Left + (formRect.Right - formRect.Left) / 2) - ((messageBoxRect.Right - messageBoxRect.Left) / 2));
                yPos = (int)((formRect.Top + (formRect.Bottom - formRect.Top) / 2) - ((messageBoxRect.Bottom - messageBoxRect.Top) / 2));

                NativeMethods.SetWindowPos(wParam, 0, xPos, yPos, 0, 0, 0x1 | 0x4 | 0x10);
                NativeMethods.UnhookWindowsHookEx(messageHook);
            }

            return 0;
        }
    }

    private static class NativeMethods
    {
        internal struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }

        internal delegate int CenterMessageCallBackDelegate(int message, int wParam, int lParam);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool UnhookWindowsHookEx(int hhk);

        [DllImport("user32.dll", SetLastError = true)]
        internal static extern int GetWindowLong(IntPtr hWnd, int nIndex);

        [DllImport("kernel32.dll")]
        internal static extern int GetCurrentThreadId();

        [DllImport("user32.dll", SetLastError = true)]
        internal static extern IntPtr SetWindowsHookEx(int hook, CenterMessageCallBackDelegate callback, IntPtr hMod, int dwThreadId);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool SetWindowPos(int hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
    }
}


Usage:
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBoxHelper.PrepToCenterMessageBoxOnForm(this);
        MessageBox.Show("Hello!", "Hello!", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, 0);
    }

2011-09-12

Screen Ruler

Screen Ruler

何回も同じものを探すのは面倒臭いから、ここにノートします。

keyword: screen, ruler, pixel, 距離

2010-09-16

深入淺出MFC 2e 學習筆記: 第一章Generic

以下是自己在Windows 7中的Visual Studio 2008下編譯Generic所遇到的問題與解決方案

Generic.mak:
這個檔案年代已經久遠,當中所使用之某些編譯工具在現在最新的vs2008已經不再提供(如rc),所以放棄不用...



Generic.h(書中code)。有稍加修改
BOOL InitApplication(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);




Generic.cpp(書中為.c)

#include <windows.h>
#include "resource.h"
#include "generic.h"

HINSTANCE _hInst;
HWND _hWnd;

char _szAppName[] = "Generic";
char _szTitle[] = "Generic Sample Application";


int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
       MSG msg;

       UNREFERENCED_PARAMETER(lpCmdLine);

       if(!hPrevInstance)
               if(!InitApplication(hInstance))
                       return (FALSE);

       if(!InitInstance(hInstance, nCmdShow))
               return (FALSE);

       while(GetMessage(&msg, NULL, 0, 0)) {
               TranslateMessage(&msg);
               DispatchMessage(&msg);
       }

       return (msg.wParam);
}

BOOL InitApplication(HINSTANCE hInstance)
{
       WNDCLASS wc;

       wc.style = CS_HREDRAW | CS_VREDRAW;
       wc.lpfnWndProc = (WNDPROC)WndProc;
       wc.cbClsExtra = 0;
       wc.cbWndExtra = 0;
       wc.hInstance = hInstance;
       wc.hIcon = NULL;
       wc.hCursor = LoadCursor(NULL, IDC_ARROW);
       wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
       wc.lpszMenuName = "GenericMenu";
       wc.lpszClassName = _szAppName;

       return (RegisterClass(&wc));
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
       _hInst = hInstance;

       _hWnd = CreateWindow(
               _szAppName,
               _szTitle,
               WS_OVERLAPPEDWINDOW,
               CW_USEDEFAULT,
               CW_USEDEFAULT,
               CW_USEDEFAULT,
               CW_USEDEFAULT,
               NULL,
               NULL,
               hInstance,
               NULL
               );

       if(!_hWnd) return (FALSE);

       ShowWindow(_hWnd, nCmdShow);
       UpdateWindow(_hWnd);
       return (TRUE);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
       int wmId, wmEvent;

       switch(message){
               case WM_COMMAND:
                       wmId = LOWORD(wParam);
                       wmEvent = HIWORD(wParam);

                       switch(wmId){
                               case IDM_ABOUT:
                                       DialogBox(_hInst, "AboutBox", hWnd, (DLGPROC)About);
                                       break;
                               case IDM_EXIT:
                                       DestroyWindow(hWnd);
                                       break;
                               default:
                                       return (DefWindowProc(hWnd, message, wParam, lParam));
                       }
                       break;

               case WM_DESTROY:
                       PostQuitMessage(0);
                       break;

               default:
                       return (DefWindowProc(hWnd, message, wParam, lParam));
       }
       return (0);
}

LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
       UNREFERENCED_PARAMETER(lParam);

       switch(message){
               case WM_INITDIALOG:
                       return (TRUE);
               case WM_COMMAND:
                       if(LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
                               EndDialog(hDlg, TRUE);
                               return (TRUE);
                       }
                       break;
       }
       return (FALSE);
}





Generic.rc(書中code)。以VS產生之原始檔,最後加入書中code
// Microsoft Visual C++ で生成されたリソース スクリプトです。
//
#include "windows.h" // 增加這行
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE 2 リソースから生成されました。
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// 英語 (米国) リソース

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
LANGUAGE 17, 1
#pragma code_page(932)

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE
BEGIN
   "resource.h\0"
END

2 TEXTINCLUDE
BEGIN
   "#include ""afxres.h""\r\n"
   "\0"
END

3 TEXTINCLUDE
BEGIN
   "\r\n"
   "\0"
END

#endif    // APSTUDIO_INVOKED

#endif    // 英語 (米国) リソース
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE 3 リソースから生成されました。
//


/////////////////////////////////////////////////////////////////////////////
#endif    // APSTUDIO_INVOKED でない場合


// 以下為自己加入
GenericMenu MENU DISCARDABLE
BEGIN
       POPUP "&File"
       BEGIN
               MENUITEM "&New",        IDM_NEW, GRAYED
               MENUITEM "&Open...", IDM_OPEN, GRAYED
               MENUITEM "&Save",       IDM_SAVE, GRAYED
               MENUITEM "Save &As...", IDM_SAVEAS, GRAYED
               MENUITEM SEPARATOR
               MENUITEM "&Print...", IDM_PRINT, GRAYED
               MENUITEM "P&rint Setup...", IDM_PRINTSETUP, GRAYED
               MENUITEM SEPARATOR
               MENUITEM "E&xit",       IDM_EXIT
       END
       POPUP "&Edit"
       BEGIN
               MENUITEM "&Undo\tCtrl+Z", IDM_UNDO, GRAYED
               MENUITEM SEPARATOR
               MENUITEM "Cu&t\tCtrl+X", IDM_CUT, GRAYED
               MENUITEM "&Copy\tCtrl+C", IDM_COPY, GRAYED
               MENUITEM "&Paste\tCtrl+V", IDM_PASTE, GRAYED
               MENUITEM "Paste &Link", IDM_LINK, GRAYED
               MENUITEM SEPARATOR
               MENUITEM "Lin&ks...", IDM_LINKS, GRAYED
       END
       POPUP "&Help"
       BEGIN
               MENUITEM "&Contents", IDM_HELPCONTENTS, GRAYED
               MENUITEM "&Search for Help on...", IDM_HELPSEARCH, GRAYED
               MENUITEM "&How to Use Help", IDM_HELPHELP, GRAYED
               MENUITEM SEPARATOR
               MENUITEM "&About Generic...", IDM_ABOUT
       END
END

AboutBox DIALOG DISCARDABLE 22, 17, 144, 75
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "About Generic"
BEGIN
       CTEXT           "Windows 95", -1, 0, 5, 144, 8
       CTEXT           "Generic Application", -1, 0, 14, 144, 8
       CTEXT           "Version 1.0", -1, 0, 34, 144, 8
       DEFPUSHBUTTON "OK", IDOK, 53, 59, 32, 14, WS_GROUP
END





resource.h 原本應該是rc根據generic.rc生成。但是VS笨笨的,所以還是自己修改吧
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by generic.rc

// 自己加入部分START
#define IDM_NEW                                 201
#define IDM_OPEN                                202
#define IDM_SAVE                                203
#define IDM_SAVEAS                              204
#define IDM_PRINT                               205
#define IDM_PRINTSETUP                  206
#define IDM_EXIT                                207
#define IDM_UNDO                                208
#define IDM_CUT                                 209
#define IDM_COPY                                210
#define IDM_PASTE                               211
#define IDM_LINK                                212
#define IDM_LINKS                               213
#define IDM_HELPCONTENTS                214
#define IDM_HELPSEARCH                  215
#define IDM_HELPHELP                    216
#define IDM_ABOUT                               217
//#define IDOK                                  300
//#define IDCANCEL                              301
// 自己加入部分END

// 新しいオブジェクトの次の既定値
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        101
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif




VS2008,打開一個新的win32程式用新專案,內容用空白
自己把上面這幾個檔案加入/修改之後就能編譯了
理論上,加入generic.rc的時候,resource.h檔案就會被自動生成,可是內容就點點點了

如果編譯出現囉嗦的字眼之類的,應該是編碼問題
把專案的編碼從UNICODE(預設)改成用多字元編碼就沒事了

2007-05-28

To Read Linux FS in windows

Read Ext2/Ext3 partition in Windows

Tool 1: Ext2 Installable File System For Windows
http://www.fs-driver.org/
It can read/write ext2 file system, but can't change the file access
and it don't support Unicode.

Tool 2: Explore2fs
http://uranus.it.swin.edu.au/~jn/linux/explore2fs.htm
It can only read ext2 file system, but it supports Unicode.

Read Reiserfs Partition in Windows

1. rfstool (commandline)
http://p-nand-q.com/download/rfstool.html 2. RFSGUI: ReiserFS browser for Windows 2000/XP/2003 (rfstool + 圖型介面)
http://www.wolfsheep.com/map/
3. 一個新開發的程式: rfsd: ReiserDriver
http://rfsd.sourceforge.net/

2006-10-22

RMVB 網站廣告移除方法:

在播放一些從網上下載的RMVB檔時,放著放著就會打開一個網頁,而且每次放到這個地方就會自動打開網頁,很麻煩。其實這是別人做廣告的一個方法,他們把網頁資料保存在Real檔的剪輯資訊中就會這樣了,我們只要去掉剪輯資訊中的網頁資料就可以解決這個問題了。

方法一:
  首先要下載軟體“Helix Producer Plus”,下載後進行安裝,軟體默認是安裝在“C:\Program Files\Real\Helix Producer Plus”下的。
  安裝好找到要去除網頁的RMVB檔(如input.rmvb),在旁邊新建一個空白的文字檔案(如event.txt),接著再新建一個批次檔案(如abc.bat),並在裏面輸入如下內容:

  "C:\Program Files\Real\Helix Producer Plus\RealMediaEditor\rmevents.exe" -i input.rmvb -e event.txt -o output.rmvb
  其中input.rmvb是要進行處理的檔,event.txt是編輯剪輯資訊的檔,output.rmvb表示處理後正常的RMVB檔。
  檔建立好後,就可以來運行批次檔案abc.bat,這時就會生成一個output.rmvb的視頻檔,它就是已經去除自動打開網頁的檔。

網站廣告原理:可以在影片中添加事件(events)是rm檔的特性之一。用戶可以安裝 RealProducer Plus (Realnetworks的官方產品之一) 來對rm檔進行編輯、製作、修改。其安裝目錄下的 RealMediaEditor/rmevents.exe 可執行檔正是用來為rm檔插入事件的命令行程式。你可以任意新建一個文字檔案,比如myevents.txt,檔內容如下:

u 00:00:08.0 00:00:20.0 &&_rpexternal&&http://www.xxxx.net/

其中,u 是事件標誌(Flag), 表示要在檔中插入的是一個url位址,第2,第三個欄位分別表示起止時間點,單位格式是 小時:分:秒.毫秒最後一個欄位是你要彈出的url的位址 , _rpexternal 參數表示在外部流覽器打開url,而不是使用realplayer內嵌的流覽器。保存之後打開命令行視窗,cd到 {RealProducer安裝目錄}/RealMediaEditor 子目錄,執行以下命令:

rmevents -i D:\MovieOriginal.rm -e D:\myevents.txt -o D:\movieWithPopup.rm

執行完成之後用播放器播放處理之後的movieWithPopup.rm檔,當播放到第8秒或者你拖動進度條至8-20秒之間的任一位置,都會彈出一個視窗來。知道了彈出視窗的原理,要把惡意rm文件的惡意代碼給去掉也很簡單了。你只要新建一個完全空白的myevents.txt文字檔案,然後重新執行上面的命令行就可以把指定rm檔中的所有事件都清除乾淨。不過要注意的是,rm事件中除了可以彈出視窗之外,還可以用 i 標誌來為剪輯添加一些說明資訊或標題。執行上述命令之後所有的標題資訊可能也會一併去除。但一般來說我們看rm電影不太會去關心這些剪輯標題資訊(何況大部分的標題資訊都是些網站的廣告之類),因此關係不大。
完整的rmevents命令行的使用方法,可以參見安裝目錄下help目錄幫助文檔。

2005-09-10

Net Tools

今天找到了三個不錯的網路工具:
NetTools
各種網路工具的綜合程式,包括ping.netstat.反查址
NetMeter
顯示網路流量的工具
NetLimiter
限制流量的工具,超好用的阿XD

2005-09-07

NOD 32 AntiVirus System

我敢說這真的是我今天最後一貼了
在PC Advance的封底內頁出現的這個廣告
真是太狂了= =+
號稱100%的準確率跟與極高的速度
去抓來替代我的NAV嗎= =||

Windows Vista

雖然澤村可以說是M$的反對者之一
但是在大家都用M$還有在M$上有不少的遊戲軟體與好用的軟體的情況下,澤村還是屈服於M$的掌底...= =||
號稱是XP的下一代,原本叫做Longhorn的這傢伙-Vista終於出現了
雖然只是Beta 1,看起來有很多酷炫的功能,且IE7這東西還真引起我的興趣
還是繼續等吧,盜版軟體與免錢的Mandriva還在向我招手呢!

ADSL撥接軟體:CFOS v6.10

使用了Traffic Shaping的技術,使得下載速度幾乎完全不受上傳速度的影響。
缺點是佔用系統資源高(11MB)
有機會一定要去敗一套來玩

下載點:
XP/2000: http://Orz.net/e10EW
95/98/ME: http://Orz.net/df0FF

人気の投稿