1 :
デフォルトの名無しさん :
02/11/07 16:41
まもなくここは 乂1000取り合戦場乂 となります。
\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,,
/三√ ゚Д゚) / \____________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/
//三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
∪ ∪ ( ) ( ) ( ) )
,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
,,、,、,,, ( ) ( ) ( ) ( )
http://big.freett.com/scheme_a/num1000.swf
1 乙 2 のタイムスタンプが素晴らしい。 リンクのフラッシュはもっと素晴らしい。誰が作ったんだ。
5get
ダイアログを生成して、ユーザにいくつかの文字列を選択させます。 その文字列をlist<string>などで返したいのですが、どういう手段が考えられるでしょうか? DialogBoxParamを用いてlist<string>のポインタを渡してやれば良いとは 思いますが、もう少しスマートな解決法を模索しています。
CD−ROMをRAW読み込みするにはASPIつかわないと駄目なんでしょうか。 CD-ROMドライブを直接読み込んだらRAWなしのISOイメージになってしまいます。
8 :
デフォルトの名無しさん :02/11/09 03:53
前スレから持ち越し。 このコードはリンクするライブラリをマルチスレッド対応版にするだけで動くんだが何故だ? _beginthreadex() って要らないの? struct ThreadInfo { HANDLE hMutex; char TestStr[12]; }; DWORD WINAPI TestFunc(LPVOID ThreadData) { ThreadInfo &Info = *(ThreadInfo *)ThreadData; std::string RetStr("result: "); const char *sep = ","; char IDBuf[64]; sprintf(IDBuf, "Thread 0x%08X Info", GetCurrentThreadId()); WaitForSingleObject(Info.hMutex, INFINITE); Sleep(100); char *s = strtok(Info.TestStr, sep); ReleaseMutex(Info.hMutex); while(s) { RetStr += s; RetStr += " - "; WaitForSingleObject(Info.hMutex, INFINITE); Sleep(100); s = strtok(NULL, sep); ReleaseMutex(Info.hMutex); } MessageBox(NULL, RetStr.c_str(), IDBuf, MB_OK); return 0; } int main() { DWORD Thread1ID, Thread2ID; HANDLE hMutex = CreateMutex(NULL, TRUE, NULL); ThreadInfo Info1 = { hMutex, "ab,cd,ef,gh" }, Info2 = { hMutex, "12,34,56,78" }; HANDLE hThread1 = CreateThread(NULL, 0, TestFunc, &Info1, 0, &Thread1ID); HANDLE hThread2 = CreateThread(NULL, 0, TestFunc, &Info2, 0, &Thread2ID); ReleaseMutex(hMutex); WaitForSingleObject(hThread1, INFINITE); WaitForSingleObject(hThread2, INFINITE); return 0; }
で、前スレで 「名前を指定してCreateMutexしなきゃ」 と言われたんだけど、 名前付きミューテックスと名前無しミューテックスとで、何か動作が変わるの?
MTでなければ、strtokが死ぬ。 MTであれば、beginthread*を使わずとも、必要な情報は OnTheFlyでライブラリが用意する。ただし、その情報を格納 するのに使ったcallocは、DLL版でないと開放されない。 (beginthread*なら、開放される)
>>9 前スレ読んでないのでその文脈で名前付きが必要なのかは分からんが、
名前付き同期オブジェクトは、同じ名前を指定する事で複数のプロセス
の間で共有できる(いちいちハンドルを複製して相手に渡す必要が無い
ので扱いが楽)
1プロセス内(の各スレッド)からしか使わないなら名前無しでいい。
前スレ(Build6)を保存しときますた。 Build4は未だにdat落ちしたままなのか… -=-=-=-=-=-=-=-=-=-= ここまで読んだ -=-=-=-=-=-=-=-=-=-=
>>10 そうなのか・・・。
動きはするけど後片付けしないと・・・。
らじゃ、サンクス。
>>11 8 のコードを指して言われた。
でもこのコードだけで言えば必要無いよね。
サンクス。
前スレ996〜998の話が丁度いい所で終わっちまってる。 続き聞かせて
少しお聞きしたいのですが、 WindowsXPproでユーザーアカウントの画像を ランダムに変更するプログラムを作りたいんですよ。 それでレジストリ書き換えて (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Hints\(ユーザー名)\PictureSource) C:\Documents and Settings\All Users\Application Data\Microsoft\User Account Pictures\ユーザー名.bmp のフォルダに画像を生成させるとこまではできたのですが、 そのあと表示を更新させる方法がわかりません。 手動でなら、 コンパネ→タスクバーのプロパティ→スタートメニューのカスタマイズ を開いて全てOKでとじれば更新されるのですが・・・。 どなたかご存じの方がいらっしゃれば宜しくお願いします。
Win2k で使えて、WinNT6 で使えない API 関数を調べたいのですが、 どこかに良いサイトはありますか? オフィシャルにある?
>>17 そんな API がどうしてあると思ったの?
>>17 なんでNT5、あるいはXPという表記じゃないの?
>>19 XPはNT6じゃないから(NT5.1)、と言ってみる
21 :
デフォルトの名無しさん :02/11/11 13:24
一定時間PCに入力(キーボード・マウス)がないと 何かの処理をするってゆ〜のを実現する方法ってないですかね? 自アプリへの入力だけぢゃなく、他アプリへの入力も考慮に入れたいんですけど・・・
23 :
デフォルトの名無しさん :02/11/12 01:47
DLL内で共有する変数を#pragmaで宣言したいんですが、 変数が2次元配列の場合はどうやって初期化すればいいですか? 今はこのように初期化してます。 #pragma data_seg(".shared") int data = 0; int pnt[1000]={0,}; #pragma data_seg() POINT型を使いたいのですが、初期化方法がわかりません。
唖然・・・。 初期化の方法もまともに知らないで DLL に手を出しちゃうの? int array[3][3] = { { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 } }; 第一、POINT は 2 次元配列じゃない。構造体。 POINT pt = { 10, 20 }; つーかそもそも、DLL 内の共有域を初期化しても、コードによってはどっから どんな更新があるかわからんぞ。
>>23 (Cの)構造体や、その多次元配列でも、= {0};でいける。
POINT p[10][20][30] = {0];
>>23 つーか、0 初期化したいだけなら、グローバルにはその必要が無い。
グローバルは初期化指定しなくても 0 初期化される事が保証されている。
>>26 それは一般論だろ。
この場合初期化しないとせっかく宣言した .shared セクションではなく
.bss に領域が取られてしまうの。
>>26 本当だ。今知った。
でも、一般論じゃなくて C/C++ の規格の話なのだが。
まずくないのか?
あ、規格というのは data_seg がどうのという話じゃなくて、グローバルなのに dup(?) になるって話。
スレ違いだと思うので、ごめんなさい。 でも、もし知っている人がいたら教えてくだされ。 WindowsXP DDKのデバッグ情報をモジュールに入れ込むにはどうすればいいんですか? PDBを作らないように設定しようと思ったけど、うまくいかないし…。 おかげでビルドしているPCでしかデバッグできなそう。 デバッグPCでデバッグしたいのになぁ。 makefileをいじったけど、全然うまくいかないし (T_T)
で、Win32環境に限って言えばBSSセクションはゼロクリア されることが保証されているので普通はまずくない。 プロセス間で変数を共有するとか特殊なことがしたいときに だけ問題になるけどそれはすでにC/C++の規格の話ではない。
Win32 API スレと厳密に言うなら、VC++ 固有の話はスレ違いだと思うが。
>>30 外してたらスマンが、
PDBで無くデバッグ情報を作る(ファイル内に)ようにして
rebaseで.dbgファイルを作ればできた気がする。
プロセス間通信などは考慮して作られていないプロセスの メモリアドレスの内容を直接読む方法ってありますか?
36 :
デフォルトの名無しさん :02/11/12 12:11
VirtualQueryEx とかかな。
VirtualQueryExで得られるのはメタ情報であって 「読む」という言葉から一般にイメージするのは ReadProcessMemoryのほうでは
読めずにFALSEが返ってきます。 何がまずいんでしょうか;; (Win2000sp3、Adminです。) #include <windows.h> #include <iostream> using namespace std; int main(int argc, char* argv[]) { DWORD dwBase = 7471220; //読み込むアドレス LPCVOID lpBaseAddress = (LPCVOID)dwBase; int cbRead = 2; //2バイト読む LPTSTR lpBuffer = (LPTSTR)malloc(cbRead); HWND hWnd = FindWindow("Notepad", NULL); BOOL bResult = ReadProcessMemory( hWnd, lpBaseAddress, lpBuffer, cbRead, NULL ); if (bResult == FALSE){ cout << "メモリの読み取りに失敗しました。" << endl; } cout << lpBuffer <<endl; return 0; }
ハンドルを勘違いしてたので修正しましたがだめだったのでエラーコード 取ってみると 「ReadProcessMemory要求またはWriteProcessMemory要求の一部だけを完了しました。」 と出ました。どこが間違ってるんだろう;;
#include <windows.h> #include <iostream> using namespace std; int main(int argc, char* argv[]) { DWORD dwPid; LPTSTR lpError; DWORD dwBase = 9460301; LPCVOID lpBaseAddress = (LPCVOID)dwBase; int cbRead = 1; // 1バイトだけ読む LPTSTR lpBuffer = (LPTSTR)malloc(cbRead); // プロセスハンドルの取得(メモ帳) HWND hWnd = FindWindow("Notepad", NULL); GetWindowThreadProcessId(hWnd, &dwPid); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid); if(hWnd == 0){ cout << "メモ帳が起動されていません。" <<endl; return 0; } BOOL bResult = ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, cbRead, NULL); if (bResult == FALSE){ cout << "メモリの読み取りに失敗。" << endl; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpError, 0, NULL ); cout << "Error MSG: " << lpError <<endl; } cout << lpBuffer <<endl; return 0;
42 :
デフォルトの名無しさん :02/11/12 19:28
あるクラスに参照カウントを持たせ、InterlockedIncrement./InterlockedDecrementで マルチスレッド対応にしようとしたのだが… void ref() { InterlockedIncrement(&m_ref); } void release() { if (InterlockedDecrement(&m_ref) == 0) { delete this; } } ところが、delete thisの直後にref()が呼ばれると、m_ref自体が解放された領域にあるため、 とんでもない値になってしまう。参照カウントをメンバー変数にするのが間違い? どうしたらいんだろう?マルチスレッドのエキスパート様の降臨おながいします。
マルチスレッドプログラミングのスレを発見したのでそちらに移ります。ゴメソ
44 :
デフォルトの名無しさん :02/11/12 20:31
staticじゃないメンバ関数をコールバックさせることはできますか? おねがいします。
>>44 コールバック関数にthisを渡してやれば解決できない問題なの?
OpenGLの描画を行うと画面下につけたステータスバーが消えちゃうんですが 回避する方法を教えてください。 glviewportやglscissorsを使ってOpenGLの描画範囲を制限しても駄目でした。 VC++&SDKです。
47 :
名無し@沢村 :02/11/13 02:15
皆々様方〜教えてくだされ〜♪ stopボタンを押したときにforループを抜けるようにしたいんですが、どうすればいいですか?
>>47 WinAPIはしらんけど、
for文の脱出条件にフラグ一個置いといて、ボタン押したら
フラグ立てたら?
49 :
名無し@沢村 :02/11/13 06:42
>>48 それはやってみました。
が、forループの間、ボタン自体押せなかったっス。
なぜWin32APIを知らずにここで答えてるんだろう…
>>49 PeekMessageとforループあたりで検索すればサンプルが見つかるかも
ふつうMulti Threadにするとおもふ
この程度なら普通マルチにしないが。 マルチは嫌われるぞ。
>>46 MainWindowの中にChildWindowを貼り付けて、それをOpenGL化するよろし。
ただしこれを受け付けないグラフィックカードがあるから注意されたし。
マルチって嫌われるんですか?
56 :
デフォルトの名無しさん :02/11/13 13:07
UNIXのatexit( )関数のように終了時に実行される関数を登録するAPIは ありますか? ただいまpdhEnumObjectItems()を使ったプログラムをテストしているのですが、 なかなかmainにおいてreturnしたあと、なかなかプロンプトが返ってきません。 そこでatexitのようなものを試しに使ってみたいと思いました。 よろしくお願いします。
58 :
名無し@沢村 :02/11/13 16:02
皆々様方〜、教えてくださらんか〜? InvalidateRect((HWND)param,&rect,FALSE);で画面を更新すると画面がちらちらしてきたないのだが、 ちらちらしないで画面を更新するにはどうしたらいいのですか? 皆々様方〜、教えてくださらんか〜?
オフスクリーン デバイスコンテキスト
CS_*REDRAWを削除 WM_ERASEBKGNDを処理
>>54 おお、なるほど。
やってみたらちゃんと動きました
ありがとうございます
62 :
デフォルトの名無しさん :02/11/14 04:26
TV_INSERTSTRUCTのitem.lParamって好きな値って 構造体のポインタとかいれて、後で使ったりするための変数? 好きな値いれていいのかな?
急にお好み焼きそばが食べたくなった。
唐揚げを食え。
唐揚げうまうまって何のことかと思ったら 空ageにかけてたのか
67 :
デフォルトの名無しさん :02/11/14 21:36
クライアント領域が完全に隠れているかどうかを調べるにはどうしたら良いですか?
厨房な質問ですいません。 WM_ENDSESSIONなどをヘルプで引くと、 「このメッセージを処理するアプリケーションは、 0を返さなければなりません。」 とかかれていますが、メッセージに値を返すにはどうしたら良いのでしょうか
一つ聞きたいことがあるのですが、 整数があって、特定の桁数にそろえて文字列(CString) に代入するにはどうすればいいでしょうか? 例: int i = 20; CString s; 5桁にそろえるとき、 sに00020という値が欲しいわけです。
>70 Format っていってるだろ 頭悪いのか? マルチしね。
74 :
デフォルトの名無しさん :02/11/15 01:12
シャットダウンのイベントを取得する方法って何かありませんか?
75 :
デフォルトの名無しさん :02/11/15 01:15
シャットダウン時にイベントを取得する方法を知っていたら、教えていただけませんか?
WM_QUERYENDSESSION/WM_ENDSESSION
すいませんが誰かわかりませんか?
78 :
デフォルトの名無しさん :02/11/15 01:52
自己レスです。 SetLayeredWindowAttributesでいけるみたいです 「透明ウインドウ」で検索すると結構引っかかりますね、鬱だ・・・。
>>77 何がしたいのかわからんが、
GetUpdateRgn()で空のREGIONが返ってきたらとかいうのはダメかな。
試してないけど。
>>80 常にレンダリングしていまして、
クライアント領域が他のウインドウに完全に隠れている状態では
レンダリングを中止させようと考えています。
基本的なことが良く分からないのでとりあえずリージョンについて調べてみます。
どうもありがとうございました。
>>69 Delphiで、Application.OnMessageを使った時はどうすれば良いのでしょうか?
>>81 常にInvalidateRect(NULL, TRUE)するとか。
完全に隠れていればWM_PAINTが発生しない。
84 :
デフォルトの名無しさん :02/11/15 12:35
>>81 GetClipBox を使えばよろしい。
85 :
デフォルトの名無しさん :02/11/15 13:53
おいおまいら、 エディットコントロールのオーナードロー(自前で描画)ってできませんか。 やっぱ1から自作するしかないんでしょうか? カーソル移動(マウス/キーボード)とかクリップボード周りの実装とか禿げしく面倒なヨカーン
よくわからんけど、オーナードローするならカーソル移動は実装しなきゃ 逝けないんじゃないのか? (EM_OWNERDRAW なんてのが MSDN に見当たらないからできなさそうだけど)
クリップボード回りはそんなに面倒ではないよ。
というか、カーソル移動とかに比べたら全然簡単だけど。 API 調べたらすぐ終わる。
そういや、リストビューで、「左キー押したら左セルに、下キー押したら 下セルに」みたいな処理してたら、なんとなくパチモンエディタみたく 感じたことがある・・
うぃ、おまいさんら! DLL内から、WMメッセージを取得する方法を教えてください。 でも、EXE本体は全くいじれない。
おなじプロセスに居るなら、サブクラス化したらええやん。
>>82 メインフォームにWM_ENDSESSIONのメッセージハンドラを作って
そこで処理してから message.Result に返したい値を入れる。
っちうかスレ違いじゃメルシィボケェ。
93 :
デフォルトの名無しさん :02/11/15 21:34
ファイルの一覧をリストビューで表示しているのですが、 IEで右クリックすると出て来るポップアップメニューと 同じ物を作るにはどうしたらいいのでしょうか。
TrackPopupMenu、、、というわけではなく、 Shellのメニュー用インターフェースがどうこう、という話?
95 :
デフォルトの名無しさん :02/11/15 22:10
>>94 オリジナルのポップアップは作れるのですが、
IEと同じ挙動(ファイルの種類によって違うメニューがでる)にできないのです・・・
test
IEじゃなくてEだろ
リージョンのハンドルを作成しなくてはいけないことと、
WM_PAINTが発生しない状態かどうか判断しにくいということで、
結局
>>84 さんの方法で行かせてもらいました。
遅くなりましたが、レスくれた方々どうもありがとうございました。
>>95 MSJ97/4号のWicked Code。
だが、これはファイル一つ用だけのメニューしか出せない。
複数のファイルのメニューをだすには、ファイル数分のITEMIDLISTを取得する必要がある。
また、「送る」を実装するにはIContextMenu2を使う。
100 :
デフォルトの名無しさん :02/11/16 00:47
エディットコントロール使わずにエディタ作ろうと思ってるんだけど、 データは1行ずつをリストで管理して、表示の時(WM_PAINT)に表示開始行まで リスト移動させて、1ページ分TextOutで表示させてるんだけど、遅いマシンだと スクロール時にかなり画面がちらつく。 で、CreateCompatibleDCでつくったDCにTextOutして1ページ分書き終えたあと BitBltしたんだけど、これだとなぜか全く表示されない。 ちらつかせないためには、どうしたらいいの?
>>100 スクロールする時にScrollWindowEx使ってるか?
あと、PAINTSTRUCTのrcPaintに更新領域が入ってるから、
その中に入るテキストだけ描画するようにすれば軽くなる。
メモリDCには、ビットマップ作ってSelectObjectしておかないと
描画しても無意味。
102 :
デフォルトの名無しさん :02/11/16 01:29
>>101 スクロールはウインドウスタイルにスクロール属性つけて、WS_HSCROLL,VSCROLL
を処理してる。
>メモリDCには・・
そうだったのか。。って、ビットマップ作るってどういうこと?
> スクロールはウインドウスタイルにスクロール属性つけて、WS_HSCROLL,VSCROLL > を処理してる。 つーかその「処理」の内容。
104 :
デフォルトの名無しさん :02/11/16 01:42
>>103 単に内部の変数(開始行)を加減して、InvaridateRectして、
SetScrollPosでスクロールバーを変更してるだけです。
ScrollWindowExは使ってないです。
なぜ ScrollWindow(Ex)? を使わない。 1ページ全部 TextOut で描画し直すよりも ScrollWindow(Ex)? でスクロールして、 新たに画面内に入ってきた行だけを再描画した方が速いだろうに。
ボリュームコントロール→トーン→デジタル出力 のON・OFFを切り替えるにはどうすればいいですかね?
107 :
デフォルトの名無しさん :02/11/16 09:50
コントロールのウィンドウ内位置の座標を 取得する方法を教えてくらはい。
GetWindowRect
してからScreenToClient
110 :
デフォルトの名無しさん :02/11/16 14:01
IWebBrowser2を使用してHTMLイメージ全体を 取得するにはどうすればよいのでしょうか?
111 :
デフォルトの名無しさん :02/11/16 17:58
Windowsは大部分がCOBOLで書かれているそうだ。 C/C++&asmで記述されているMacOSXと比べて基本性能がケタ違いに低い。
>111 ( ´д)ヒソ(´д`)ヒソ(д` )
113 :
デフォルトの名無しさん :02/11/16 18:25
ライブラリ関数について質問です Video for WindowsライブラリのcapGrabFrame関数で取り込んだ画像を RGBの配列に変換する方法をご存知の方教えてください。 イメージバッファには読み込まれてると思うんですが、 capSetCallbackOnFrame等を使わずに そこをどうやってプログラムから参照すればいいのかわかりません。 よろしくお願いします。
1 行目からしてスレ違いな気がしないでもない まー漏れ Video for Windows わかんねーけど
115 :
デフォルトの名無しさん :02/11/16 22:18
リッチエディットコントロールで、RTFの画像を表示したいのですが、 どうすればできるでしょうか?MFCが使えない環境なので、困っています。
>>111 ファミリーベーシックって聞いたよ。
直接ゲイシが言ってたから間違いない。
>>106 mixer...で始まるAPIの使い方を調べてみるといいんじゃないかな。
ボリュームコントロールと同等のことをするサンプルコードが
あったはず。
IWebBrowser2をオフスクリーンに描画する方法を教えて下さい。 メモリデバイスコンテキスト作ってSetDCとかできないんでしょうか?
>>119 TextOut(hdc,0,0,"IWebBrowser2",strlen("IWebBrowser2"));
keybd_event 以外で 起動しているIEへBackSpaceキーを送りたく、 ハンドルはIEのタイトルバーの所の値として SendMessage(***, WM_KEYDOWN, VK_BACK, 0); SendMessage(,*** WM_KEYUP, VK_BACK, 0) としても、だめでした;。 どうしたら良いでしょうか?
WM_CHAR
訂正 ×SendMessage(,*** WM_KEYUP, VK_BACK, 0) ○SendMessage(***, WM_KEYUP, VK_BACK, 0);
>>122 おお、 早速ありがとう!!
そのてがありましたね。試してみます。
>>118 レス、サンクス。
私もそれについては多少調べてみたんですが、
各ラインに対してMuteや音量の設定はできるようなのですが
デジタル出力のON・OFFに関する設定は見つかりませんでした。
mixerMessageを使えばいけるかなとも思いましたが
どんなメッセージを送ったらよいのか、さっぱりわかりませんでしたし。
使ってるサウンドカードはAudigyなんですけど
ドライバに対するプログラミングリファレンスなんて
転がってないですよねぇ?(^^;
for(;;){ if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){ if(!GetMessage(&msg, NULL, 0, 0)) break; TranslateMessage(&msg); DispatchMessage(&msg); }else{ /*これ。*/ if((fni = (*fns[fni])(&gst)) < 0) break; } } のif((fni = (*fns[fni])(&gst)) < 0) break; ってどういう意味なの?
>>126 fnsは関数へのポインタへのポインタもしくは関数へのポインタの配列。
fni番目に格納された関数へのポインタを用いて、その関数を間接的に呼んでる。
C++なら、operator[]が定義されたクラスかもしれんなあ・・・
そんな変態は無視汁 マクロ定義されてたらとか言い出すとキリがねえ
#define private public
現在、リモートTV録画予約を構想中です。 1.メールBOXに予約メールが届いたら、 録画マシン(Xp)をACPIを使用して起動させる。 (by ルータ&MailBOXマシン) 2.Xp 予約処理をOutLookマクロにより、 予約メールGET時、予約処理を行う。 2.a:iEPGで生成される同フォーマットで 予約情報ファイル作成、配置。 2.b:Xpのタスクに登録。 2.c:休止状態にする。 というフローです。 その中で、 2.b、2.cの処理をAPIを呼んで行いたいのですが、 ご存知の方、ご教授ください。 ATコマンドは休止からの復帰をさせることができません。
132 :
デフォルトの名無しさん :02/11/18 19:53
>>131 2.b 「Task Scheduler」でMSDNを検索しる
2.c SetSystemPowerState(FALSE, TRUE) ただしNT系のみ
自分(実行ファイル)のファイルハンドルを取得し、 ReadFileで読み込むという作業をしたいのですが CreateFileでINVALID_HANDLE_VALUEが返ってきてしまいます。 どのようにしたら取得できるでしょうか?(↓自分が書いたもの) hFile = CreateFile("crackme1.exe", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
135 :
デフォルトの名無しさん :02/11/18 20:29
>>135 即答ありがとうございます。
FILE_SHARE_READにしてみたのですが
INVALID_HANDLE_VALUEが返ってきてしまいました。
もうすこしがんばってみます。
137 :
デフォルトの名無しさん :02/11/18 20:41
>>136 それで、できるはずですが、ファイルパスは合ってますか?
::GetModuleFileNameで取得した値を使ってみるとか。
というか、GetLastErrorの値ぐらいみれ。
139 :
デフォルトの名無しさん :02/11/18 20:46
crackme1.exe
全言語のページから#defineを検索しました。 約11,000,000件中1 - 10件目 全言語のページから#endifを検索しました。 約1,790,000件中1 - 10件目 全言語のページから#ifdefを検索しました。 約808,000件中1 - 10件目 全言語のページから#undefを検索しました。 約460,000件中1 - 10件目 全言語のページから#ifndefを検索しました。 約411,000件中1 - 10件目
>>137 GetModuleFileNameで取得した値でできました。ありがとうございます。
>>138 2でした。って漏れFormatMessageの使い方わからん(;´д`)
ErrorLookup 値:2 指定されたファイルが見つかりません。
>>141 >漏れFormatMessageの使い方わからん
MSDNの FormatMessage() のところに、サンプルもろに出てますよ?
144 :
デフォルトの名無しさん :02/11/18 22:08
マウスを制御するAPIの名前までは調べたのですが、どうもうまく動かん。 キーボードの制御は出来た。マウスを自分の思う位置に動かして、クリック操作などを制御したい。 操作するウィンドウは、自アプリ外。Win9x系で動けばいいです。 アドバイス頼む! ┌─┐ |ま| |た | │く │ │る│ │ね.| ヤホィ イェェア │ !!.│ └─┤ ニコニコ ヽ(´∀`)ノ ヽ(´∀`)ノ (´∀`)ノ ( ´∀) | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U 〜 〜  ̄◎ ̄ . ̄◎ ̄  ̄◎ ̄ ◎−>┘◎
Win32APIの関数などをヘルプファイルにして簡単に 検索できるようにしたものってありますか。 bccでやっているけど、いちいちmsdnみるのが面倒で(ダイヤルアップ回線なので)。
146 :
デフォルトの名無しさん :02/11/18 22:50
ヽ(´∀`)ノ
>>145 MSDNに加入しる!
ライブラリサブスクリプション(技術資料だけ)なら安くてオフラインで読める。
というか、PlatformSDKに付いてくる英語のならロハだし、 それで充分だろ。日本語訳ってたまにdでもない 間違いとかあるし。
>>120 オゥ、即答ありがとう。
解決しました。
マジかよ?!
>>125 あ、「トーン」でしたか。
ろくに読まずに書いてしまいました。すみませぬ。
mixer系APIからは直接操作できないっていうか仕様が調べられない
部分ですか。うーん。どうすればいいんだろ。
っていうかこのあたり、サウンドカードによって同じような名前の
ミキサーラインでもタイプが違ってたりして混乱しますよね。
NT限定でいいんだけど、 %SystemRoot%\System32\〜 みたいなパスを C:\WINNT\System32\〜 みたいに正式なパスに変換してくれるAPIってないんかな?
ExpandEnvironmentStrings つーか、ちったぁ検索しろや。機能そのままの名前じゃんかよ。
154 :
デフォルトの名無しさん :02/11/22 00:57
Win95+IE5の環境で、SHGetSpecialFolderLocationにCSIDL_APPDATAを 渡して実行しても失敗してしまいます。 このAPIで取得するにはどうしたら良いのでしょうか?
そのフォルダは 95 にある?
無かった気がする。
SHFolder.dllを明示的にリンクしてSHGetFolderPathを呼び出すしかないんでしょうか・・・
どなたかタスクバーのプロパティを起動する方法を知りませんか? VBなら Dim oShell As Object Dim hwndTask As Long hwndTask = FindWindowEx(0, 0, "Shell_TrayWnd", vbNullString) Call SetForegroundWindow(hwndTask) Set oShell = CreateObject("Shell.Application") oShell.TrayProperties でいけるみたいなんですが、CにはCreateObject関数も Object型に相当する物も見あたりませんでした。 他のコンパネみたく*.cplファイルも無いみたいだし。 宜しくお願いします。
>>158 自己レスです。
CoCreateInstanceを使えばいけました。
スレ汚し申し訳ない。
160 :
デフォルトの名無しさん :02/11/23 17:17
よく最前面のウィンドウに張り付くようなソフトがありますが、任意のウィンドウが最前面 になったタイミングというのはどうやって取得しているのでしょうか?
161 :
名無し@沢村 :02/11/23 23:58
皆々様方〜、私はいま複数のトラックを鳴らすところで大変苦労してるんですが、なんとか同時に複数のトラックを鳴らすとこまではできたのですよ。 でもあともう一歩なんです…! もう一歩というのは、トラック2つでもシングルトラックを鳴らすのに比べて、速度が半分に落ちるし、鳴り方もぎこちないんです…。 これがそのコードですが、あとどこを直せばいい…? 教えてくだされ〜♪ for(i=0;i<=i_Sum_Track[i_longest_Track];i+=2) {_Time= timeGetTime(); for(l=0;l<16;l++) {t[l]=0; for(j_i=0;j_i<Onpu_Index[i_longest_Track];j_i++) {k[l]=j[l]*8; if(CodeCount[l]!=0) {if(i==t[l]) {midiOutShortMsg(hMidiOut, 0xC0+l+ ((i_gattuki[l]) * 0x100)); midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((7) * 0x100)+((possrider[l]) * 0x10000)); midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((8) * 0x100)+((possrider_b[l]) * 0x10000)); midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((10) * 0x100)+((possrider_s[l]) * 0x10000)); midiOutShortMsg(hMidiOut, (DataCode[l][k[l]]) + (DataCode[l][k[l]+1] * 0x100)+(DataCode[l][k[l]+2] * 0x10000)); // Note On } t[l]+=DataCode[l][k[l]+3]; if(i==t[l]) {while (Play_Tempo(DataCode[l][k[l]+3])>=timeGetTime()-_Time); midiOutShortMsg(hMidiOut,(DataCode[l][k[l]+4])+ (DataCode[l][k[l]+5] * 0x100)+(DataCode[l][k[l]+6] * 0x10000)); // Note Off j[l]++; }}}}}
マルチポスト(・A・)イクナイ
163 :
デフォルトの名無しさん :02/11/24 02:17
リソースエディタで作ったエディットボックスの文字の色を変えるには どうしたらいいですか?
MFCを使わずに、自分のウインドウにhtmlファイルを表示したいのですが、 どうしたらできるでしょうか?
>165 エディットボックスってオーナドロー出来なかった気がする、、、
OnCtlColor WM_CTL_COLOR スペル違ったらスマソ
>The WM_DRAWITEM message is sent to the owner window of an >owner-drawn button, combo box, list box, or menu when a visual aspect of >the button, combo box, list box, or menu has changed
>>167 それで、描画するためのデータはどこから持ってくる?
WM_CTLCOLOREDITのwParamがエディットコントロールのHDCだから それでSetTextColor()できる気もするな。
>>165 さんくすです。
IWebBrowser2のNavigate2を使い、htmlやjpegが表示できますた。
でも、bmpを表示しようとしたら、ペイントが立ち上がったり、
開くかどうか聞いてくるダイアログがでたりしました。
でも、ときどき表示されたりもします。原因がさっぱりわかりません。
何か、先行して処理する必要があるのでしょうか?
Win32 static libraryで、どういう関数にWINAPIをつけたら良いのでしょうか。 内部で使う関数には付けず、外部に公開する関数だけにつけておけばよいのでしょうか?
calling conventionのことか? そのライブラリが激しく内輪ならべつにどうでもいいと思う
その lib をどういう位置付けにするかですべき事が変わるだろ。
とりあえず自分で作ったライブラリの関数にWINAPIを付けたい理由を聞かせてくれ。
C言語以外から呼ぶことを考えるなら、WINAPIというかstdcallにするべきでは? (ついでに、C規約より少しだけ効率いいし)
>>179 dynamic linkならそれも考慮するかもしれんが・・・
>>180 んー、Delphiならbccとリンクできるし、
gccはC++に限らずFortranとかAdaとかでミックスランゲージできるし……ちと苦しいか。
正直staticの文字を見逃してました。スマソ
182 :
デフォルトの名無しさん :02/11/25 12:49
Explorerで、ファイルのプロパティの概要で得られる、 コメント、キーワード、分類などので情報を 設定するには、どうすればいいですか?
>>183 APIとか、コードでやりたいとおもわれ。
186 :
デフォルトの名無しさん :02/11/25 16:03
あるフォルダが存在するかどうかを知るにはどのAPIを使えばよいのでしょうか?
>>186 Win32APIなら、FindFirstFile()
標準C Libraryなら、_findfirst()
>>186 SetCurrentDirectory とか CreateFile でもいけそうだけどなー。> 教えて君
_stat
いつも思うんだけど、 こういう質問をする「教えてクン」って、 後で仕事をきちんと完成させることができたかどうかが気になる。 つか、ちょっと心配になるよ。
2ちゃんねるで聞くよりも検索した方が早いと思うしね。
もし
>>186 が検索をしていないとすると、
>>187 の回答を得るまでに
>>186 は53分間も待たなければならなかったわけでしょ。
教えてクンはまたーりしているんだなぁ...
192 :
デフォルトの名無しさん :02/11/25 18:33
どなたか Win32API WriteProcessMemory を使ったごくごく簡単なサンプルを...... 環境はwin2k vc5 です。 Web上にあった物はまともに動きません......
エクスプローラーが落ちた時に、 児童復旧する タスクトレイ のプログラム方法を教えてください。
194 :
デフォルトの名無しさん :02/11/25 18:50
_beginthreadのハンドルをHANDLEにキャストしてWaitForSingleObjectに使えるらしいんですが INFINITEにしたら際限無く待ちつづけるのですが、他がおかしくてキャストは間違いないのでしょうか?
↑スレッドはちゃんとexitThreadで終了しています
>>194 それができるのはexの方。
Win32マルチスレッドプログラミングって本読んでね。
>>193 RegisterWindowMessage TaskbarCreated をgoogle
>>195 どうもです。CloseHandleがいるやつですね。
> 標準C Libraryなら、_findfirst() おいおい・・・
>>186 漏れなら、GetFileAttribute()とかPathIsDirectory()かな。
ハンドルを閉じる手間がないから。
PathIsDirectory() は素でリンクできないからキライ
あ、ひょっとしてどんなに煽られようと必ずお節介な奴が 答えて教えてクンの「聞いたもの勝ち」になるのがムカつくから 自分で答えを調べられない奴には分からない程度に嘘教えたのかな だったら邪魔してスマソ
206 :
デフォルトの名無しさん :02/11/26 04:26
虫眼鏡みたいなウインドウを作ろうと思っています。 自分のウインドウの下のイメージを取得するにはどうしたらいいでしょうか?
> 自分のウインドウの下のイメージを取得する できるかなあ? できないんじゃないか?
「ウインドウの下のイメージ」なんて(WindowがLayered化 されてない限り)存在しないので不可能です。 WM_PRINTに対応してたらなんとかなるかも
209 :
デフォルトの名無しさん :02/11/26 10:57
質問ですが、Winの印刷で、一つの印刷ジョブでA4→B4→A4・・・とかの 異なるサイズの印刷ってできますかねぇ? ジョブ分けると、スプーラからのメッセージがちょっと・・・
>>208 半透明ウインドウとかはどうやってるの?
ホットゾヌの書き込みウインドウが半透明になっている下で、 スレッドがスクロールしたりするんですけど。 画面からはみ出したりすると、他のウインドウも下に見えるし、どうやってるの?これ。
213 :
デフォルトの名無しさん :02/11/26 13:52
>>212 Layered化すれ(どうやってするんだろう・・・)ば、下のイメージが取り出せるのですか?
214 :
デフォルトの名無しさん :02/11/26 14:33
>>209 ResetDCで行けそうな気はするが、このファンクションは
DEVMODEのどこまで書き換えられるのかイマイチ掴めないんだよな。
216 :
デフォルトの名無しさん :02/11/26 15:32
ReadやReadlnでは、Enterキーが押されるまで帰ってきませんが、 キーボードの押された1文字読み込める関数はあるのでしょうか? ググってみたのですがダメでした。よろしくおねがいします。
cut:「やReadln」
218 :
デフォルトの名無しさん :02/11/26 16:07
>>192 debug privilege
一般的に使われるものではないから、素人に質問しても無駄だと思われ
add:「getch()以外で」
>>210 SetLayeredWindowAttributes
で検索しる
>>219 GetKeyState
WM_KEYDOWN
224 :
デフォルトの名無しさん :02/11/26 18:51
PropertySheet() で作成するダイアログでWinXPの新しいコントロールを 使うようにしたら、どのようにしたらいいんでしょう? manifestは書いてみたものの変わらず、PROPSHEETHEADER にもそれらしい 項目はありませんでした。
なんか日本語が崩壊してる・・・(´Д`;) × PropertySheet() で作成するダイアログでWinXPの新しいコントロールを 使うようにしたら、どのようにしたらいいんでしょう? ○ PropertySheet() で作成するダイアログでWinXPの新しいコントロールを 使わせるようにするには、どのようにしたらいいんでしょう?
>221 レスありがとうございます。 さっそく、挑戦してみます。
int ch; SetConsoleMode( GetStdHandle(STD_INPUT_HANDLE), 0 ); while( ch = fgetc(stdin), ch != EOF) fputc( ch + 1 , stderr );
>227 ありがとうございました。ジャストでした。 感謝、感謝、感謝です。
>>229 韓国の大学ではそういう授業があるんですか?
猫プロのWinSDK第18章で、 bcc32 でコンパイル&実行できた人っています? どうしてもダイアログのメニューが出てこないんですが。 リソースはばっちりだと思うんだけどなぁ。
うあ。 プロシージャの中の switch からっぽで、 リソースだけくっつけてコンパイルしてもメニューが出ないぢゃねーか。 bcc32 で Windows プログラミングって・・むちゃ?
>>232 bcc32というかWindows(GUI)プログラミングをC++で作るのに
GUIエディタが無いのがむちゃ。
234 :
デフォルトの名無しさん :02/11/26 23:11
>>233 んなこたーない。
メニューは全て動的に作って、追加する。
コントロールも全て動的に作って追加する。
別にGUIツールが無くても問題ない。
んー。全部動的に・・・てのはやりたくないです。 Borland C++ Compiler に付属の brcc32 (リソースコンパイラ)でリソースをコンパイルして、 bcc32 (コンパイラ)で .c をコンパイルして、 brc32 (リソースシェル)でコンパイルした .res を .exe にくっつけて やってるんですが、これって何か陥りやすいミスってあります?
ここでメニューが出ないといえばたいがいMAKEINTRESOURCEで解決
>>236 ごめん。巣でわからないです。
つか、MAKEINTRESOURCE調べてもわからなかった・・・。
これと猫プロSDK18章ってなんか関係すんの?
>>237 BCCDeveloper 入れてみました。
cygwin 上で vim + GNU make とどっちがいいんだろ。
しばらく使ってみよ。
DLLを明示的リンクしたいのですが DLLEXPORTした関数(HOOK)が ?HOOK@@YAHHP6G みたいに変な関数名になるのですが、 綺麗に出来ませんか?
defファイルを書く extern"C"を使う
スゲー。アリガd。
VC6でですが、 現プロジェクトのmain.cpp以外を スタティックライブラリとして 生成したいのですが、 やっぱり スタティックライブラリのプロジェクトを作って、 地道に全ソースをプロジェクト追加 しないとダメなのでしょうか? 階層がいっぱいあって、めんどくさいのです。 ビルド→構成→追加(コピー) から、出来そうな気がするのですが。 出来ないでしょうか?
API質問じゃなかった。 間違えましたすんません。
レスついてない・・・ ⊃Д`;) あれから PROPSHEETPAGE の項目に hActCtx なんてのが comctl32 ver.6.0 から 増えていることが分かったけど、何に使うのかよく分からない(苦笑)。 (どうやらmanifestに書くような内容を記述するみたい) これが関係してるのかな?
リソースに manifest の xml を参加させる。
猫プロ、Editを「エジット」と記述するのさえなければ、 いいんだけどなぁ。違和感ありまくり。 #スレ違いスマソ。
248 :
デフォルトの名無しさん :02/11/27 10:18
>>222 スマソ。言葉が悪かった。
それを専門又は相当詳しいやつがいないと厳しいという意味。ちょっとだけ特殊な世界なので。
250 :
デフォルトの名無しさん :02/11/27 10:49
>>242 出ても買わん。C言語ポインタ完全制覇があれば十分。
>>247 ローマ字入力で「ディ」が出せなかったものと思われ
最近の記事ではちゃんとエディットになってる(w
ツールバーのボタンのそれぞれを好きな寸法にしたいのですが、 どんな方法があるのでしょうか。
TBSTYLE_AUTOSIZE でできました・・・。
デスクトップに文字列表示できないかと思って 以下のコード書いたんですがうまくいかないんです。 なぜうまくいかないんだ。 よかったらどなたか教えてくれませんか? HWND hDesktop; HDC hDC; RECT rectDraw; const char str[] = "Desktop!"; hDesktop = ::GetDesktopWindow(); hDC = ::GetDC(hDesktop); ::GetClientRect(hDesktop, &rectDraw); ::DrawText(hDC, str, strlen(str), &rectDraw, DT_CENTER); ::ReleaseDC(hDesktop, hDC);
何にも表示されないんです・・・。
257 :
デフォルトの名無しさん :02/11/27 20:51
CString* をchar* に代入するには いかそ?
258 :
デフォルトの名無しさん :02/11/27 20:55
>>257 コンパイルでUNICODE定義していないなら、
CString *aaa;
aaa になんか値が入る。
char* p = (char*)(*aaa);
>>255 試してないが、
CreateDC("DISPLAY",NULL,NULL,NULL);
でどうだ?
>>259 うまくいった!
感謝!
あなた神です。
261 :
デフォルトの名無しさん :02/11/27 22:49
>>259 それだと「デスクトップ」じゃなくて画面全体じゃないか?
っていっても、260で喜んでるので、そういうものが欲しかったのか。
普通デスクトップって言ったら、Explorerの画面全体を覆ってる
リストビューのこと指すと思うんだがなあ。
>>261 窓でのデスクトップの定義について
小2週間くらい勉強してこい
265 :
デフォルトの名無しさん :02/11/27 23:08
( ゚д゚)ポカーン
266 :
デフォルトの名無しさん :02/11/27 23:11
267 :
デフォルトの名無しさん :02/11/27 23:16
>>261 「Explorerの画面全体を覆ってるリストビュー」って
どれのこと?
・・・あーそういうことだったのか! やっとわかった!
270 :
デフォルトの名無しさん :02/11/27 23:31
・・・で、真の厨房は誰だったんだ?
( ゚д゚)ポカーン
270
つれた!!
>>261 その「Explorerの画面全体を覆ってるリストビュー」って
どうやって取得できるんですか?
よかったら教えてもらえませんか。
>>271 261です。
「Explorerの画面全体を覆ってるリストビュー」がデスクトップか否かに関わらずアホだから。
>>275 FindWindowとかでProgram Managerを検索して、
その子ウインドウでクラスがSysListView32になっている奴を捜すんじゃないの?
>>275 やったことないけどGetWindow(GetDesktopWindow(),GW_CHILD);
とかで取れないか?
280 :
デフォルトの名無しさん :02/11/28 00:13
だめなんだなー それじゃー
今Spyで見てみたら、 デスクトップ +ProgramManager + SHELDLL_DefView + SysListView ←これ だった。
282 :
名無し@沢村 :02/11/28 00:32
皆々様方〜、ツールバーだが、ツールバーにビットマップを標示すると、 色が表示されずにグレーになったり、使ってるうちにだんだんイロがあせてきたりするんだが、 これはどうやったら直せるのですか? ちなみに画面のプロパティの詳細は256色です。
また沢村かよ・・・
>>283 Macじゃあるまいしモニタを買い換えても意味ないだろ。
ビデオカードを買い換えないと。とかマジレスしてしまうテスト
286 :
デフォルトの名無しさん :02/11/28 12:41
WinMain() の中から直接 DialogBox() をコールしてダイアログボックスを 表示するアプリを作っているのですが、キーボードイベントをうまく扱え ません。 ネットで調べてみると、どうも「ダイアログボックスには WM_KEYDOWN イベントが飛んでこない」ようです。 「ウインドウのサブクラス化」も試みてみたのですがうまくいきませんでした。 やはり、親ウインドウがないダイアログボックスではキーボードイベントを 扱うことは出来ないのでしょうか?
>>288 そのものずばりでした。ありがとうございます。
292 :
デフォルトの名無しさん :02/11/28 15:59
今タイムタグ付き歌詞ファイルを読み込んで色を変えながら表示していく ("[00:01:00]あ[00:02:00]い[00:03:00]うえお\n"のような文字列を読んで解析) プログラムを作っています。 内部では struct { int msec; char *text; int mode; // 0なら一行分、1なら色を変える部分のみのテキスト } * dataのようなものを作って持たせています。 上の例だと data->msec==1000,data->mode==0,data->text=="あいうえお" (data+1)->msec==2000,(data+1)->mode=1,(data+1)->text="あい" (data+1)->msec==3000,(data+1)->mode=1,(data+1)->text="あいうえお" DrawTextかTextOutだけでうまいことやれる方法はないですかね。 mode=0のものを書いた後にTextOutすると後から書いた領域がちょっとだけ大きくなって 先に書いたものが消えちゃうんです。 BitBltで透過転送してたら重くて使い物にならなかった。
293 :
224=245 :02/11/28 17:35
解決しますた。 リソースにmanifestを含める場合、manifestのリソースIDを必ず1にしないと いけなかったのですな。 VS.netだったからそのへんは適当にやってくれるもんだと思ってた・・・鬱 manifestを外部ファイルにしても反映されなかったんだけど、それはmanifest のファイル名が間違っているという単純ミス。逝ってきます。 exe_no_namae.manifest じゃなくて exe_no_namae.exe.manifest なのね。 ってなわけで今はちゃんとXPのビジュアルスタイルでダイアログが表示されてまする。
なんだそんなことか。
でも勉強になったよ。ありがとう。
続きです・・・ Win2k では WM_ACTIVATEAPP でフックを呼ばないと、他のアプリでの入力後、 フックが切れることがある。が、Win9x でそれをやると100%クラッシュする!! 今回は OS の判定ルーチンを入れて対応しましたが・・・(Win9x では WM_INITDIALOG でフックを呼ぶようにした) このような経験された方いらっしゃいます?
297 :
名無し@沢村 :02/11/28 19:25
皆々様方〜、いろいろありあとうございました、皆々様方〜! 私はここでコールバックタイマーを使用しろとか、複数トラックのデータをマージしてひとつのデータにまとめろとか、いろいろなアドバイスをいただきました。 でもはっきりいってそんな面倒なことはしたくなかったんです…。 はっきりいって手抜きに近い楽なやりかたで複数トラックをちゃんと演奏する方法を見つけたかったんです。 でもついにその方法が見つかったんです!! その完璧なルーチンをここに乗せますから、皆様方も楽にmidiシーケンサーをつくるときの参考にしてください、皆々様方〜! for(i=0;i<=i_Sum_Track[i_longest_Track];i++) {for(l=0;l<16;l++) {t[l]=0; if(CodeCount[l]!=0) {for(jj[l]=0;jj[l]<Onpu_Index[l];jj[l]++) {kk[l]=jj[l]*8; if(i==t[l] ) { _Multi_Time[l]= timeGetTime(); midiOutShortMsg(hMidiOut, 0xC0+l+ ((i_gattuki[l]) * 0x100)); midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((7) * 0x100)+((possrider[l]) * 0x10000)); midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((8) * 0x100)+((possrider_b[l]) * 0x10000)); midiOutShortMsg(hMidiOut, 0x0000B0+l+ ((10) * 0x100)+((possrider_s[l]) * 0x10000)); midiOutShortMsg(hMidiOut, (DataCode[l][kk[l]]) + (DataCode[l][kk[l]+1] * 0x100)+(DataCode[l][kk[l]+2] * 0x10000)); // Note On} t[l]+=DataCode[l][kk[l]+3]; if(i==t[l] ) { while (Play_Tempo(DataCode[l][kk[l]+3])>=timeGetTime()-_Multi_Time[l]); midiOutShortMsg(hMidiOut,(DataCode[l][kk[l]+4])+ (DataCode[l][kk[l]+5] * 0x100)+(DataCode[l][kk[l]+6] * 0x10000)); // Note Off } }} }}
298 :
デフォルトの名無しさん :02/11/28 19:29
おいお前ら! visual stdio .NET買ったんですけど 付属のヘルプにすべてのAPIの日本語の解説はあるのですか?
>>298 全てはない。
重要と思われるウィンドウメッセージの説明も英語だから注意しれ(w
というか、その為のこのスレか?
>>277 ありがとう。
あんたが正しかったよ。
マジで感謝。
windows.hとかのヘッダファイルはどこで最新のものをダウンロードできますか? microsoftのサイトだとは思うんですが、なかなか見つかりません。
304 :
デフォルトの名無しさん :02/11/28 22:36
ウィンドウのリサイズを左右のみに限定したい。 限定する事自体は WM_GETMINMAXINFO ですぐにできたんですが、 ウィンドウの角にマウスカーソルを持っていった時にマウスカーソルが 斜め矢印になってしまうのを抑制する事はできないんでしょうか?
>>304 ごめん。自己解決。 WM_NCHITTEST でした。
ウインドウに標準のスクロールバーをつけて(WS_VSCROLL)それを処理するコードも書いたんですが、 ずっとマウスを押してもスクロールバーが一回しか動きません。 ダイアログで同じことをするとちゃんとずっと動くんですが、、、 ウインドウを作るときになんか追加の設定とかが必要なのでしょうか?
Shellに詳しい方教えてください。 SHGetDesktopFolder()でデスクトップフォルダ(IShellFolder)を取得し、 ParseDisplayNameメソッドでpwszDisplayNameにPathではなくURLを指定しても ITEMIDLISTが作成可能です。こいつのAttributeを調べてみると、 SFGAO_BROWSABLE が立っています。説明をみると、Folderではないが、 CreateViewObjectメソッドのみ実装されたIShellFolderインターフェース が取得可能ということ。そこで、こいつの親FolderであるIEフォルダ (IShellFolder)を作成後、BindToObjectメソッドを使い、問題の IShellFolderを取得しました。さらにCreateViewObjectメソッドで オブジェクト(IShellView)も作成することができました。 が、このオブジェクトの正体は何なんでしょうか? Folderでないためか、CreateViewWindowメソッドは失敗してしまいます。 別のView関連のインターフェースが実装されているのでしょうか? 作成できるということは何らかの使い道があると思うんですが、 MSDNを調べてみてもわかりません。よろしくお願いします。
309 :
名無し@沢村 :02/11/29 00:53
>>306 ぶぁっはははははーーーっ!!
スクロールバーもまともにつけられない奴がこの世にいたのか!?
ぶぁっはははははーーーっ!!
ぶぁっはははははーーーっ!!
こんにちは、Win32API厨です。 sprintf,memcpyなどは必ずwsprintf,MoveMemoryにするよう 自らはもちろん、周りの連中にも布教しており、Cランタイム関数撲滅に精を注いでおります。 が、悔しいことにmemcmpとatoiだけ同等のAPIが見つからず、泣く泣くCランタイム関数を使わざるを得ません。 こんな私めにWin32APIでこれらと同等の関数があれば、ぜひぜひ教えてくださいまし..
まざるとうざいから、特別な理由がない限りCランタイムのにしてくれよ
>>311 memcmp() -> CompareMemory()
atoi() -> AsciiToInteger()
MoveMemoryってmemmoveのdefineだけど。
ZeroMemoryもmemsetに...
SecureZeroMemoryって、最近のMSDNのいい話と悪い話みたいな タイトルの記事見るまでマジで意味分からなかった。
memcmpやmemsetは通常インラインに展開されるんだから Cランタイム撲滅には関係ないと思うんだけど
>311 wsprintfは、"The maximum size of the buffer is 1024 bytes. " な制限があって、昔はまった、、、 今はsnprintf使てます
みんな沢村をまるで相手にしてないのがワラタ
322 :
でむぱ=311 :02/11/29 18:00
>>313 両方ともMSDNにもないっすよぉ...
>>314 ,315,317 VBのAPIビューアからだとKernel32.dll の各エクスポート関数
(Rtlなになに)を呼んでいるのに、VC++はなぜにmemmove,...にしてしまうんだろ!?
悔しぃ…。
ちなみに、#defineでRtlEqualMemory !memcmp(s,t,l) なんてのもあるんですね。
(WINBASE.H,WINNT.H)
>>318 私もはまりますた。が、懲りずにlstrcatで合成してwsprintfを使っています。
確か書式の指定方法もsprintfと微妙に違うんですよね...
GlobalAllocと通常のmallocの違いがわからないんだけど…
GlobalAlloc は API malloc は C 標準関数 大違い
malloc() はプロセスヒープからメモリを割り当てる。 HeapAlloc(GetProcessHeap()) とほぼ同じだが、free() は HeapFree() と違って ヒープにメモリ領域を返さず、次に呼ばれる malloc() のために取っておく。 GlobalAlloc() はグローバルヒープ (システムヒープ) からメモリを割り当てる。 クリップボードのデータ等、共有の目的で使用する。 共有メモリのためアドレスが定まっておらず、その領域を使うには GlobalLock() で 固定する必要があるが、固定したままだと他のプロセスから使用できない。 Windows 9x では 4 MB 未満のメモリブロックを想定して設計されているので、 それ以上は代わりに VirtualAlloc() を使えとある。
使ってみてから言ってる? (Win32 では) GlobalAlloc() と LocalAlloc() は全く一緒。 しかし GlobalAlloc() と HeapAlloc(GetProcessHeap) は、HGLOBAL を得る事が できるかどうかという点で違う。 使い方というか用途もそれぞれ全く違う。 Microsoft が同じだと述べているのは、プロセス内において作業領域としてメモリを 確保した時の事について。
漏れが言いたかったのは 「malloc、GlobalAlloc、HeapAlloc(GetProcessAlloc)は確保される場所は同じなんだろ」 ということなんだが…
mallocがどこからメモリを取ってくるかは処理系依存。 VirtualAllocから取ってきて、独自分配しても合法
そういう話をしたいなら、ヒープもスタックもテキストも全部同じメモリの上に 載ってますが、と返してあげるけど。 で、同じだから何だって? 326 の URL にはそんな事全く書いてないし、仮にそうだとしてもそれを知ってて 何か役に立つの? 想像だけど、GlobalAlloc() はグローバルヒープをプロセス空間にマッピング するためにプロセスヒープを割り当ててるだけで、HeapAlloc(GetProcessAlloc) と同じように使ってくださいという趣旨ではないんじゃないの? malloc() は 325 の通りだから HeapAlloc(GetProcessAlloc) よりも速い事も あれば無駄なオーバーヘッドな事もある。 (重箱の隅をつつけば、326 は malloc() について何も訴えていない)
>328 > 「malloc、GlobalAlloc、HeapAlloc(GetProcessAlloc)は確保される場所は同じなんだろ」 そりゃ x86 プロテクトモードだと、メモリ空間は 32bit フラットだからな。 ただ、ユーザが 32bit フラットなメモリ空間に直にアクセスするのは 1. プログラム書くのが大変 2. OS がリソース配分できなくなる という問題があるので、まっとーな OS では途中に何階層か用意して、適宜メモリを 切り出して割り当てるようになってる。GlobalAlloc や malloc は、その「階層」の厚み や中身が違う。 混ぜると core 吐きます。
GlobalAllocはWin16との互換性のためにあるから なるべく使うなといいつつHGLOBALを要求するAPI (クリップボード関係とか)がある現状をどうにかしてくれ>MS
ヒープは複数持てるよ。mallocとかが使うのはデフォルトヒープ。 独自のヒープでメモリを管理して漏れを防いでもいいかも。
>>334 なるほど、まとめて解放してくれるんですか。便利かもしれませんね。
ふと思ったのですが、malloc/free/new/deleteが実際に使うヒープは
同じでないとまずいですよね。VC同士ならイイんでしょうけど...
>>336 マズい可能性がある。
理由はそれだけではないが、ライブラリが確保したリソースはそのライブラリに
解放させるのが定石。
>>335 Global〜が廃止されてるCEではさりげなくSetClipboardDataの
引数なんかもHLOCALに変更されてるんだよな。
ま、Win32sを除けばHLOCAL==HGLOBALなわけだが
関係ないが、なぜヒープというのかみんな知らないんだろうな(w
>>334 new して free(),malloc()して delete してみればいいんじゃないの?
確かしいたけアボーンされたと思うけど。
まあ普通に考えれば「そんなアドレス管理してまへんがな」となるわな
>340 世の中、そういうタチの良い malloc/free ばかりでもなく。無条件で、与えられた アドレスは「malloc によって割り当てられたはず、したがって直前に管理データ があるはず」とか信じてる free() も存在する。 (管理データ壊して遠からず core を吐くけど、いつ誰がどこで管理データを 壊したのかは分からない_
ん?gnuのはモードを切り替えられたような・・・ vcもそうだったと思う
343 :
デフォルトの名無しさん :02/12/01 03:29
CreateProcessとかで、コンソールアプリを起動して その終了を確実に待つのは、 WaitForSingleObject(pf.hProcess, INFINITE); ではだめなんですが、どーしたらいいですか? CreateProcessの第2引数に、"cmd.exe /c xxx.exe" としています。
cmd.exeの終了を待ったってそりゃダメだ
"cmd.exe /c " 何の効果があるんだ?
>>345 コマンドプロンプトで cmd.exe /? と入れれば出てくる。
そうじゃなくて、直接 "xxx.exe" でいいんじゃないかという話なのだが。
348 :
真面目に質問 :02/12/01 09:38
すいません、WinSock2で困っています。 ネットワークプログラミングの勉強をしている初心者なのですが、今、VisualC++6を使っていますが。 以下のとおり入力したらエラーがでました。 ↓ #include <winsock2.h> . . . WSADATA wsaData; WSAStartup(2,&wsaData); (エラー) リンク中... Network.obj : error LNK2001: 外部シンボル "__imp__WSACleanup@0" は未解決です Network.obj : error LNK2001: 外部シンボル "__imp__WSAStartup@8" は未解決です Debug/Network.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー Network.exe - エラー 3、警告 0 なぜ、エラーが出るのでしょうか???教えていただけませんか? すいません、初歩的な質問で・・・。
>>348 wsock32.libをリンクしてないんじゃない?
350 :
真面目に質問 :02/12/01 09:45
>>349 ws2_32.lib をインポートすると言うことでしょうか?
インポートはどうすればいいのですか?
>>350 それくらい自分で調べろよ。
プログラマとしての適性が無いばかりか、人間としての最低限の能力だろ。
352 :
真面目に質問 :02/12/01 10:05
>>349 ws2_32.lib をインポートすると言うことでしょうか?
インポートはどうすればいいのですか?
353 :
真面目に質問 :02/12/01 10:07
>>351 すいませんでした。
解決しました。
プロジェクト→設定→リンクタブ内で、ws2_32.libを追加しました。
まことにすいませんでした。失礼な質問をして・・・。
>>347 それでも、けっかは同じでした。
コンソールアプリは、終了をまってはくれません。
終わったことを知りたいのではなくて?
StrechBlt() を使うとページ違反が頻発するのですが、 これはそういうものなのでしょうか? 特に拡大Bltするとページ違反が何百Kにもなるので不安です。
メモリをオンデマンドで確保してる、とか。
>>354 ちゃんと待つけど。お前のプログラムがへぼいんだろ
> コンソールアプリは、終了をまってはくれません。 何のことを指しているんだ?
StretchBltは全てのデバイスに対して使えるわけではない。
使えるデバイスかどうか判定する方法も書いてくれるとさらに親切だな ちなみにGetDeviceCapsを使うわけだが
>>360 ,361
なるほど、StretchBlt()にはそんな落とし穴が・・・
見た目正常に動いていたので謎でした。
どうもありがとうございます。助かりました。
363 :
デフォルトの名無しさん :02/12/02 08:37
タイトルバーのないウィンドウってどうやって作るんですか? これでもタイトルバーは付いちゃいますよね。 hWnd = CreateWindow(szWindowClass, szTitle, NULL, // ←スタイルにNULL指定 CW_USEDEFAULT, CW_USEDEFAULT, 256, 256, NULL, NULL, hInstance, NULL);
364 :
bloom :02/12/02 08:52
WS_POPUP
個人的に、StretchBlt はデバイス未対応だったら GDI がエミュレートすべきだと 思うのだがどうよ?
>>343 コンソールアプリの終了を待ちたい、ということだろうが、ちゃんとできてるぞ。
ちなみに、cmd.exeを通して呼ぶのではないが、その必要性は感じない。
コンソール「アプリ」なんだからな。
とりあえず、コードを晒せや。
CreateProcessとWaitForSingleObjectの引数が重要だ。
>>369 デバイスドライバがエミュレートするならば、デバイス未対応とは言わない。
GetDeviceCaps() に応答するのはハードウェアではなくデバイスドライバ。
つーか、367 はユーザープログラムにいちいち GetDeviceCaps() させるような
作りは間違っているという話じゃないのか?
>>370 未対応つーともっと凶悪なの見たことあるぞ
RC_STRETCHBLTが真になるのにStretchBltがずっこけるプリンタとか
age
それは、ドライバの製作元に爆弾を投下していい話じゃないのか?
で、独り言というか報告ですが、 BeginPaint()で取ったHDCにもRC_STRETCHBLTが 効いてないようでした。StretchDIBits()もダメ。 BitBlt()はOKですが・・・。 結局DirectDrawのBlt()で拡大したら、ページ違反が 出なかったのでこれでいこうかと思います。
StretchBltは、失敗してしかも GetLastError が 0 ということってママあるよね。 一度に描画するピクセル数を減らすとかすればよいのかな。
376 :
デフォルトの名無しさん :02/12/03 13:38
別スレッドで昨日から質問させてもらっていたのですが、答えが得られません でした。教えて頂けそうな所を探していた所、専門的なこのスレッドを 見つけましたので、ここで質問させていただきます。 C言語でコンソールにsetpixel関数での描画の仕方がわかりません。 別にウインドウを開いてやるのは、やり方だけはわかるのですが コンソールのほうに応用はできません。下に書いた感じだと思うのですが。 お教えお願いします。 #include <windows.h> int main(void) { HWND hWnd; HDC hDC; hWnd=? hDC=GetDC(hWnd);//描画準備 SetPixel(hDC,100,100,RGB(255,255,255));//描画 ReleaseDC(hWnd,hDC);//描画終了 return 0; }
>>376 FindWindowはエロいからちょっとおすすめできない
つーかコンソールにピクセル描こうとかいう発想そのものがキチガイじみてる
0xA800,0xB000,0xB800,0xE000 のセグメントからいじれ
>>379 スレ違い
しかもいまどきそれで絵が書ける機種(PC-9800シリーズ
なわけだが)がどれだけあるんだ?
379はネタだろ。
哀れな376をからかうための。
だいたい
>>376 よ、
お前はWindowsプログラミングの基礎がわかってないぞ。
出直してこいや。
383 :
デフォルトの名無しさん :02/12/03 17:59
1つのクライアント領域に2つ以上のタブコントロールを配置する事って可能ですか? タブが2つ以上じゃなくて、タブコントロール自体を2個以上配置したいのですが。 やはり、タブコントロールごとに子ウインドウを作って、その上にタブコントロールを 置くしかないんでしょうか?
>>383 すきなだけ配置すればよいと思うのだが出来なかったか?
>>384 タブが選択されたときの全てのWM_NOTIFYが全部同じ親ウィンドウに行ってしまうので
判別ができないんですよ。
NMHDR::hwndFrom はどうなった。
>>383 Delphi使えばこんなくだらないことではまらなくてすみますよ。
>>383 これ見ても意味分からなかったらDelphi/VBでも使っとけ。
WM_NOTIFY:
{
NMHDR* nmhdr=(NMHDR*)lParam;
switch (nmhdr->idFrom) {
case IDC_TABCTRL1:break;
case IDC_TABCTRL2:break;
}
}
390 :
デフォルトの名無しさん :02/12/04 00:43
あるウインドウAが子ウインドウを3つくらい持ってるんだが(自力で位置調整して表示してる) WM_SIZEでウインドウAのサイズを変えたときに子ウインドウの位置・サイズもMoveWindowで かえてるんだけど、ドラッグしてサイズ変更してるときとかはウインドウがちらついてしょうがない。 MFCで作られたやつはサイズ変更してもほとんどちらつきは無いけど、こういうのってどうやって SDKレベルで実装すればいいんですか?
WM_ERASEBKGND?
某ネットゲーのDirectXフルウィンドウ表示を、 通常のソフトの様に表示させようと思って、 色々試したのですが、SetWindowLong SetWindowPos等を 使ってみたりしても、変更できず、色々探したのですが、 あまり有益な情報が出てこなかったので、どなたか、 何かヒントでもあれば、教えて下さい。
>>394 デバイスリセットしないと無理だよ?
第一ソフト側で切り替えられないなら
フルスクリーン依存の処理ばっかりだろうし。
VMWareつかう(w
397 :
デフォルトの名無しさん :02/12/04 10:11
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; if (!hPrevInstance) { if (!InitApp(hInstance)) return FALSE; } if (!InitInstance(hInstance, nCmdShow)) { return FALSE; } while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } 上記のプログラムをビルドすると 「error C2275: 'MSG' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。」 となってしまうのですが、なぜでしょうか? ファイル名を「prog.cpp」にするとビルド出来るのですが「prog.c」にするとエラーになってしまうのですが。
398 :
デフォルトの名無しさん :02/12/04 10:11
システムのタスクバーやOfficeツールバーのように画面の一部分を占有するためには どのAPIを使えばいいのでしょうか?
400 :
デフォルトの名無しさん :02/12/04 10:39
LAN間でソケット通信をしたいと思っているのですが、 どのようなAPIを使えばいいのでしょうか?
>>401 あんがと。良い検索のキーワードが思いつかなかったよ。
403 :
デフォルトの名無しさん :02/12/04 18:08
だれかBrowser Componentのhostingで、 <!--[if gte IE 5 ]> <link rel="stylesheet" type="text/css" href="style.css"> <![endif]--> の IEのバージョンを詐称するやり方知りませんか? IMarkupTextFrags や IMarkupPointer あたりを使うのかと思いきや、 どっからこのInterfaceを取得してよいのかわからん・・・
>>402 「Windows ソケット通信」でボロボロ出てきたけど?
>>404 ほー、「Windows ソケット通信」でAppBarについて出てくるのか。
_, ,_ ( ´_ゝ`) すまなかった
>396 VMWare って DirectX 動いたっけ?
409 :
デフォルトの名無しさん :02/12/04 20:42
WinSockで質問ですが、以下のソースでconnectするとエラーになるのですが、 何が原因かwかったら教えていただきたいのですが・・ bool __fastcall TWinSock::Open( void ) { WORD vr = MAKEWORD(1, 1); WSADATA wd; // 初期化 if( ::WSAStartup( vr, &wd ) ) return false; // ソケット作成 if( (SocketHandle = ::socket( PF_INET, SOCK_STREAM, 0 )) == INVALID_SOCKET ){ ::WSACleanup( ); return false; } // 接続 struct sockaddr_in sa; sa.sin_family = AF_INET; sa.sin_addr.s_addr = inet_addr("192.168.1.22"); sa.sin_port = htons(1); ::ZeroMemory( sa.sin_zero, sizeof( sa.sin_zero ) ); if( ::connect( SocketHandle, (struct sockaddr *)&sa, sizeof( sa ) ) == SOCKET_ERROR ){ Close( ); return false; } return true; }
プログラム的に特におかしいところはないが。 つか、ちゃんと相手はいるのか?
> エラーになるのですが どんなエラーか書かんかい。
413 :
デフォルトの名無しさん :02/12/05 17:31
414 :
デフォルトの名無しさん :02/12/05 18:00
CPUの使用率を知りたいです。 っちゅーても、ただの使用率じゃなく、指定した優先順位以上のプロセスの使用率。 たとえば、distributed.net に参加してたりすると常に100%近いですが、タスクマネージャで見ると基本優先度は「低」ですよね。これを引いた値を知りたいんです。 通常のプロセスの動作に影響を与えるCPU負荷を取得する方法を探してます。
>>414 (゚Д゚)ハァ? 何を引くの?
優先度はタスクスケジュールのパラメータで
CPU使用率とは直接関係ないと思うのだが?
>>415 全タスクの内、指定した基本優先度以上のタスクのCPU使用率を知りたいんです。(最初からそう書け?)
ソースのイメージでは以下のような感じ。
CPU使用率 = 0;
for(i = 0; i < タスク数; i++){
if(タスク[i].基本優先度 >= 通常){
CPU使用率 += タスク[i];
}
}
417 :
デフォルトの名無しさん :02/12/05 19:42
エクスプローラーでカット&ペーストを使ったファイルやフォルダの 移動って、同一ドライブなら(コピーが発生せずに)一瞬で終わって しまいますが、どういう仕組みなんでしょうか? あれと同じ事をプログラムから行いたいんですが・・。
ありがとうございます。 やってみます。
>>409 192.168.1.22の1番のポートにつないでるけど、
ちゃんとそっちでaccept呼んでる?
エラーをちゃんと言ってくるまで放置でいいだろ ノートンを窓から投げ捨てろに3port
422 :
デフォルトの名無しさん :02/12/06 16:53
HRGN = CreateRectRgn(...); SetWindowRgn(handle, HRGN, 1); この HRGN はすぐに DeleteObject してしまっても良いのでしょうか? MSDN には The operating system does not make a copy of the region. Thus, you should not make any further function calls with this region handle. In particular, do not close this region handle. とありますが、ネットでサンプルを検索してみると削除してしまっている人が結構いますので・・・ 英語に自信がないのでもしかしたら解釈が間違っているのかと・・・
>>422 日本語MSDNより(SetWindowRgn)
SetWindowRgn 関数が成功すると、オペレーティングシステムは、
パラメータ hRgn で指定したリージョンを所有します。
リージョンのコピーは作りません。
したがって、以後、このハンドルを使用したり解放したりしないようにしてください。
ということで俺は律儀に保有してるよ。
どうもです 削除してもちゃんと動いているように見えるので調べてみて混乱したわけですが わたしも残す事にします 423さんありがとうございました
>422 氏と似た内容ですが、 SetClipboardData( CF_TEXT, hmemText ); の hmemText は解放して良いのでしょうか? MSDN には "The application can read the data, but must not free the handle or leave it locked until the CloseClipboard function is called." と書かれているので解放できそうなのですが ネットでサンプルを探すとたいていは「解放してはダメ」と注意書きがしてあります。 これはいったいどういうことなのでしょうか?
>must not free the handle ほう、「開放できそう」、ね
until the CloseClipboard function is called. とも書いてあるわけだが。
>426 until the CloseClipboard function is called
>ほう、「開放できそう」、ね 英語見る限り別に解放しても問題ないじゃんか CloseClipboard()呼んだ後なら...
CloseClipboard、GlobalFreeした時は何とも無くて、 アプリケーションが終了する時にメモリエラーが発生するに100モナー。 日本語版から: SetClipboardData を呼び出した後で、システムは、hMem パラメータで指定されたオブジェクトを所有します。 アプリケーションはデータを読み取れますが、CloseClipboard 関数を呼び出すまでは、 そのハンドルを解放することや、ロックし続けることを避けなければなりません。 (CloseClipboard を呼び出した後も、アプリケーションはそのデータにアクセスできます。) hMem パラメータがメモリオブジェクトを指している場合、そのオブジェクトは、 GMEM_MOVEABLE フラグを指定して GlobalAlloc 関数で割り当てたものでなければなりません。
MSDNのサンプルでも解放はしてないみたいだけど... 解放(GlobalFree)って、すなわちクリップボードの破棄になる? っていうかクリップボードを明示的に破棄したい場合ってどうするの?
EmptyClipboard()を使う。
今思うに、CloseClipboardした後アプリが死んでも、 クリップボードのデータは残るから、GlobalFree してもいいんじゃないかな。
(´-`).。oO(どこにのこるんだ
GetClipboardData の場合は破棄しちゃまずいけど、 SetClipboardData の場合は問題ないんじゃない? 俺はエラー起こったことないけど…
438 :
デフォルトの名無しさん :02/12/06 23:58
マウス使ったお絵かきプログラムで、取得したマウスの座標の ・ストローク(一本の線)の数 ・一本のストロークに含まれる座標点(x,y座標) ・一本のストロークに含まれる座標点の数 を変数に保存しておきたいのですが、 typedef struct{ int PCount;//ストロークの座標点の個数 POINT SPoint[1000]//ストロークの座標点;//1000個決め打ち } SPOINT; typedef struct{ int SCount;//ストロークの数 SPOINT Stroke[1000];//同様に1000個決め打ち・・・ } STROKE,*PSTROKE; STROKE a; 今はこんな感じの構造体作ってやってますが、もっと良い方法はないものかと思いまして。 特に構造体の確保やストロークの座標点などは動的にメモリに確保する方が良さそうですが。 Win32SDK+VisulaCで開発しています。
自分ならこう。 typedef struct _STROKEPOINT{ list<POINT> list_point//ストロークの座標点の履歴 } STROKEPOINT; typedef struct _STROKE{ list<STROKEPOINT> list_strokePoint;//STROKEPOINTの履歴 } STROKE,*PSTROKE;
お、なんかmodula-2みたいだ。
443 :
デフォルトの名無しさん :02/12/07 19:19
動的確保するなら、
typedef struct{
int PCount;//ストロークの座標点の個数
POINT* SPoint;//ストロークの座標点;//1000個決め打ち
} SPOINT;
typedef struct{
int SCount;//ストロークの数
SPOINT* Stroke;//同様に1000個決め打ち・・・
} STROKE,*PSTROKE;
にしてmallocとかで確保すりゃ良いんじゃないの?
そもそもなんで固定長にしたんだ?
ただ、
>>439 みたくリスト構造にして管理する方がベターかもな。
std::vector の方がずっといいと思う。
おっとsage忘れた。
ところで
>>438 はC(not C++)使いだよね?
>>444 まあ、相手はマウスだからな(w
メモリコピーのコストもそれ程気にならないだろう。
メモリコピーのコストがイヤなら std::list いずれにせよ、コンテナが使えるような状況で自分でリスト構造を書こうとするのは 漏れはイヤだったらイヤだ。
448 :
名無し@沢村 :02/12/07 20:54
皆々様方〜、教えてくださらんか〜♪ それはmidiファイルの読み込みだが、自分で保存したmidiファイルは難なく読み込めるわけよ。 だが、他のmidiシーケンサーで作ったmidiファイルは、ちゃんと読み込めるものと、読み込んで鳴らすとチンドン屋みたいな音になってしまうものとが出てくるわけよ。 ま、ほとんどのmidiファイルはチンドン屋みたいになってしまって、ちゃんと読み込めるものはほんの少しだわな…。 皆々様方〜、私はこの原因を分析した結果原因らしきものを突き止めたわけよ。 それはノートノンやオフのステータスバイトってあるだろ?90や80よ。 それを省略して本来90407F7Fみたいにするところを407F7Fと省略するだろ? で続けて書くと90407F7F407F7Fになるわな…。 それでデルタタイムというのもあるだろ? デルタタイムは1バイトから4バイトまでの可変長になっていて、1バイトだったら、例えば90407F7Fになるが、もし4バイト だったら、例えば90407F7F407F7Fになるだろ? そうすると90407F7Fに続く407F7Fがステータスバイトが省略されてのノートオンのメッセージなのか、デルタタイムなのか区別がつかんわけよ。 どちらも7F以下で同じだしな…。 皆々様方〜、90407F7Fに続く407F7Fがステータスバイトが省略されてのノートオンのメッセージなのか、デルタタイムなのか区別する方法を教えてくださらんか〜皆々様方〜♪ ぜひお願いします♪ 私はいま最後の壁にぶち当たっているのですよ!!!
>>424 NT系だと無害そうに見えるが9xで破局する
>>沢村 お前マジでうざいよ 寒いんだよ。
>>448 スレ違いだとは思うけど・・・それと、その口調やめれ。んで、だな。
デルタタイムはすべてのメッセージの前に付く。
デルタタイムの後に、ランニングステータスバイトが、あるか、ない。
その後に、ノートの音階とかベロシティが来る。
その後は、またデルタタイムが来て、その後にランニングステータスバイトがあるかもしれないしないかもしれなくて、その後に音階とかベロシティが来る。
んで、またデルタタイムが来て、・・・って感じ。デルタタイムはすべてのメッセージの前に必ずある。わかった?
みなさまレスありがとうございます。 私はC++は使ったことがなかったのでそのような方法は気が付きませんでした。 もっと勉強しなければ・・・。
つかC++の標準リストクラス使うのもいいけど、リスト構造を全く知らないんなら まずは自力でリスト作って理解したほうがいいと思うのだが。
つーか、「沢村」 は定型の荒らしコピペだから、みんな以降無視してくれよ。
457 :
デフォルトの名無しさん :02/12/08 12:43
リスト構造は一応理解しています&プログラムも作りました。
459 :
デフォルトの名無しさん :02/12/09 20:44
済みません、教えてください。 メニューが出ていた場合に、その矩形領域を取得するにはどうしたら良いのでしょう? クライアント領域に表示している画面イメージを取得しているのですが、他のアプリ のウィンドウがその上にある場合には、その部分のイメージを取得したくないので クライアント領域をクリップして、子ウィンドウのクリッピング領域をCombinRgnでOR をとった上でイメージを取得しているのですが、 メニューに隠れた領域が、隠れた領域が、真っ黒になってしまいます。 トップレベルのウィンドウの子ウィンドウのクリップ領域もORをとってみたのですが、 症状は変わりません。そもそも、メニューからウィンドウハンドルが取れるのか どうかも知らないヘタレです。 出来れば、くオーナードロウなどには手を出したり、メニューを出す部分に手を加えたくありません。 よろすくおながいすます。
>>459 隠れた領域は実際に何も描かれてないのだから無理。
言葉が足りず済みません。 メニューに関しては、メニューに隠れた部分が真っ黒になるのではなく、 メニューのイメージを含んで取得したいのです。
>459 ポップアップメニューのウィンドウクラスは "#32768" なので HWND hwndMenu = FindWindow( "#32768", NULL ); とやればメニューのウィンドウハンドルは取れるかも。 ただ、普通に > クライアント領域に表示している画面イメージを取得 したのなら > メニューに隠れた領域が、隠れた領域が、真っ黒 にはならずにメニューが取得されるはず。 具体的に何がやりたくて、どう実装してみたのかが知りたい。
463 :
デフォルトの名無しさん :02/12/10 08:30
HHOOK hHookMouse = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc, DLLLocal::hInstance, NULL); HHOOK hHookMessage = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProc, DLLLocal::hInstance, NULL); これで、MouseProc にはちゃんと制御が行って、CallWndProc には制御が全く来ないという 状況なのですが、原因わかる人いますか? ちなみに、SetWindowsHookEx() そのものは両方とも成功しているっぽいです。
464 :
ヘタレ459 :02/12/10 11:12
>>462 ありがd。
昨日帰り道で同じ事を思いついて、今朝着てやって見たところ、思ったとおりに出来ました。
やりたいことは、あるウィンドウのクライアント領域のイメージを取りたい。
ただし、他のアプリケーションのウィンドウと重なっている部分は除く。
ただし、自分のメニューで隠れている部分は、メニューのイメージを表示する。
できあがったのは、こんな↓感じです。なにかおかしな点、改善点があったら何でもWelcome。
(つづく)
465 :
ヘタレ459 :02/12/10 11:13
BOOL CALLBACK EnumChildWindowsProc(HWND hWnd, LPARAM lParam) { HRGNclipRgn = (HRGN)lParam; HRGNrgn = ::CreateRectRgn(0, 0, 0, 0); HDCDC = ::GetWindowDC(hWnd); ::GetRandomRgn(DC, rgn, SYSRGN); ::CombineRgn(clipRgn, clipRgn, rgn, RGN_OR); (void)::DeleteDC(DC); (void)::DeleteObject(rgn); return TRUE; } ... clipRgn = ::CreateRectRgn(0, 0, 0, 0); ::GetRandomRgn(DC, clipRgn, SYSRGN); ::EnumChildWindows(m_hWnd, EnumChildWindowsProc, (LPARAM)clipRgn); hWndMenu = ::FindWindow(_T("#32768"), NULL); if (menuWnd != NULL) { ::GetWindowThreadProcessId(menuWnd, &pid); if (pid == GetCurrentProcessId()) { HDC DC = ::GetWindowDC(menuWnd); HRGN rgn = ::CreateRectRgn(0, 0, 0, 0); ::GetRandomRgn(DC, rgn, SYSRGN); ::CombineRgn(clipRgn, clipRgn, rgn, RGN_OR); (void)::DeleteDC(DC); (void)::DeleteObject(rgn); } } ::GetDCOrgEx(DC, &org); (void)::OffsetRgn(clipRgn, -org.x, -org.y); ...
466 :
デフォルトの名無しさん :02/12/10 15:09
>>463 CallNextHookEx()してないとか。
>>466 レスありがと。
でも、CallWndProc が呼ばれてないので CallNextHookEx() しようがないんですが・・・。
それとも、別の常駐プロセスがポカしてる可能性もあるって事ですか?
他にフックしてそうなプロセスがあるわけでもないのですが・・・。
ちなみに、WH_CALLWNDPROC の代わりに WH_CALLWNDPROCRET や WH_GETMESSAGE
を指定しても同様でした。
468 :
デフォルトの名無しさん :02/12/10 19:24
IEで、アドレスに
http:// telnet://
ftp:// などとやった場合、そのプロトコルに応じた処理を行うけれど、
自分でそれを実装する場合にはどうすればいいの?
例えば、
xyz://
とやりたいんだけれど
HKEY_CLASSES_ROOT\http のマネをすりゃいいんじゃないの? よく知らないけど。
>>469 早速のレスthx!
ちょっと見てみたけれど、例えばftpみたいに結果を改めてブラウザに表示するには
どうすればいいんだろう?
Pluggable Protocol Handler
473 :
デフォルトの名無しさん :02/12/11 02:34
背景に画像を設置したエディタを作りたいのですが、方法が分かりません。教えてください。 ちなみに、今の私の現状は、EDITで作って、CTL_COLOREDITメッセージで、文字の背景を透過にしてから、画像のブラシを返したところ、画像が更新されず、昔書いた文字が消えなかった。 行き詰ったので、RICHEDITに乗り換えてみたところ、文字の背景の透過自体を受け付けてくれない気がする。さらに、画像のブラシを返すような関数が今のところ見つからないという状況です。
起動中のプログラムにフックしてその中で呼ばれているAPIのかわりに 自作関数を呼ぶようにすることは可能ですか?
> でも、CallWndProc が呼ばれてないので CallNextHookEx() しようがないんですが・・・。 MouseProcで。なに寝ぼけてるんだ?
>>473 その目的に近い動作をしているアプリをSpy++
>>473 CreateBrushIndirectとかで作ったブラシを
WM_CTLCOLOREDITの戻り値として使いたいってこと?
"apiフック"
>>476 MouseProc でならちゃんとしてるよ。
寝ぼけてると言われても、そう取れるレスじゃん・・・。
483 :
名無し@沢村 :02/12/11 22:34
銀行のATMにアクセスするプログラムの書き方 //ネットワークに流れるデータを受信する recive(data); //データがATMのときは if(data==ATM) //1億円を自分の口座に振り替える。 sendmoney(100000000)from(anybank)to(mybank);
>478 説明が悪かったですね。WM_CTLCOLOREDITで、返り値にブラシは返せましたし、画像は表示されました。 文字の背景を透過させることで、画像の上に文字も載せられました。 でも、一度表示された文字が消えないという問題が出ました。 例えば「nnnn」という文字書いて、ウインドウをスクロールさせると、 nnnn nnnn nnnn nnnn という風にディスプレイには表示されてしまうのです。 とはいえ、文字データ自体が増えている訳ではないので、画面の更新さえすれば何とかなると思ったのです。 しかし、WM_PAINTで画面全体をBITMAP画像で更新するという方法も試したのですが、昔に書いた文字が消えてしまうという問題が出てきました。 昔書いた文字データを、記憶はしているようなのですが、古いデータはWM_PAINTでの画面の更新には反応しないという仕様のようです。 RICHEDITも今ひとつ見通しが立ちません。 もしかすると、全て自作の関数で作るべきなのかもしれないと考えているところなのですが、 どの様な方法で実現できるのか、アドヴァイスをいただけませんでしょうか?
WM_SCROLLでInvalidRect(NULL)すれ。
>485 それも一度試したのですが、結局WM_PAINTが呼ばれるだけですよね。 たぶん、EDITの文字の更新はWM_PAINTを通してないと思うんです。 昔書いた文字が何故か更新されないという問題が結局残るんですが。
>>486 自分もEDITをサブクラスして、
入力補完もどきを作ってみた事があるが、
どうやらGetDCして書き換えてるみたい。
>>文字の背景を透過させることで、画像の上に文字も載せられました。
SetBkMode使ったの?
だったら、EDITクラスの関知しないところだから、
自前で更新してやるしかない。
嫌な方法だけど、RedrawWindowとかMoveWindowは試した?
RedrawWindow,MoveWindowは試してなかった。 今夜にでもやってみます。 でも実はEDITクラスでは多種の文字の色とかを混在できないっぽいので、 最近はRICHEDITに走ろうとしてるんです。 でも、RICHEDITにはSetBkModeが通用しない様なんですが、無理なんでしょうか? それとも、通知メッセージのマスクがかかっているって、「猫でもわかる・・・」にあったんですが、 それに引っ掛かっているんでしょうか?
RichEditには詳しくないので、解決方法があるかもしれないが、 過去自分もEDITクラスで色々やったが、意味不明な挙動が多々あった。 悪い事は言わないからやめとけ。 自前でクラス作った方が話が早い。 ただし、バッファ管理、描画処理等プログラミングの醍醐味満載だけどな。
WM_GETTEXT と WM_SETTEXT に自前で応答するにはどうしたらいいの? 外部プロセスからのが捕捉できないんだけど・・・。
呼び出し側でGetWindowTextを使ってる限り無理。
いや、SendMessage() なんスけど・・・。 それでも結局 Get/SetWindowText() と一緒という事でつか?
SendMessageならプロシージャは呼ばれるはず。 Spy++で呼ばれるウィンドウのメッセージ見てみて。 まさかメッセージループで捕まえようとはしてないよね?
> まさかメッセージループで捕まえようとはしてないよね? Σ(゚д゚lll)ガーン そーしてまつた・・・。 どうするの? フック? MSDN には何も書いてないみたいだけど・・・。 Spy++ で見ると、「自分の知らないところ」 が応答しているように見えまつ。
MSDNライブラリ日本語版のSendMessageより: 指定されたウィンドウが、呼び出し側スレッドが作成したものであった場合、 そのウィンドウのウィンドウプロシージャがサブルーチンとして即座に呼び出されます。 指定されたウィンドウが、他のスレッドが作成したものであった場合、 システムはそのスレッドへの切り替えを行い、 次に適切なウィンドウプロシージャを呼び出します。 複数のスレッド間で送信されたメッセージが処理されるのは、 受信側スレッドがメッセージ取得コードを実行したときだけです。 送信側スレッドは、受信側スレッドがメッセージの処理を終えるまで、 ブロックされます(待機状態になります)。 だから、自前のクラスでなかったらサブクラス化しれ。
495 は自分の番号間違えますた・・・。
>>496 ごめんなさい、メッセージループとウィンドウプロシージャを混同してました。
自分で RegisterClassEx() したウィンドウなんですけど、ウィンドウプロシージャに
他プロセスからのメッセージが飛んでこないです。
(自プロセスからのメッセージは捕まえられまつ)
なのに、他プロセスから WM_SETTEXT すると Spy++ で見れるウィンドウテキストが
変化するので、「自分の知らないところが応答しているように見える」 状態なんです
けど・・・。
Spy++では該当ウィンドウにWM_SETTEXTは送られてるよう? (知ってるとは思うけど・・・ ウィンドウリストの該当ウィンドウ上で右クリック->メッセージ)
>>498 何か、OS 再起動したらちゃんと動いてくれるようになったよ・・・。
振り回してごめんなさい。
しかし、再起動で直るって事は、どっかメモリ壊してるんだろうか・・・、、
Spy++ のメッセージウィンドウでもちゃんと WM_GET/SETTEXT の S と R が
確認できますた。
でも、外プロセスからでもテキストの取得をちゃんとできるのに、Spy++ に表示
されてるウィンドウテキストが "" のままだけど、これはいいのかなあ?
たぶんGetWindowText使ってるんでしょ。
そうでつか・・・。 長々とありがとございますた。
502 :
デフォルトの名無しさん :02/12/14 02:16
画面の解像度を取得したいのですが、仮想スクリーンの場合に 仮想スクリーン全体ではなく実際に表示されるピクセル数を 取得できる API はありませんか? 例えば、1024x768 の LCD で 1280x1024 の仮想スクリーンを使っている 場合、1280x1024 ではなく、1024x768 を取得したいのです。 GetDeviceCaps ではできないようなので困ってます。
503 :
デフォルトの名無しさん :02/12/14 02:55
>>502 さんのは GetSystemMetrics() か SystemParametersInfo()
あたりで取れないのかなーなんて見ていたら
GetSystemMetrics( SM_SLOWMACHINE )
なんてのを見つけました。これが TRUEとなるマシンってどんなんですか?
くだらない質問なんですけど。
>>502 漏れは
GetSystemMetrics(SM_CXSCREEN)
GetSystemMetrics(SM_CYSCREEN)
を使ってるよ。
Under Windows 95, use GetSystemMetrics(SM_SLOWMACHINE) to check for low-end computers. It returns a nonzero value if the computer has a 386 CPU, is low on memory, or has a slow display card. The return values (bit flags) are: 0x0001 - CPU is a 386 0x0002 - low memory machine (less than 5 megabytes) The following is notable for video: 0x0004 - slow (nonaccerated) display card
>>503 486 マシンでも、それが TRUE になったのを見た事が無い。
灯台元暮らし
masokoをなめるには ・ どのれす?
すいません。WinSockの質問をしたいのですが。 サーバーにHTTP接続を試みているのですが、うまく接続できません。 ソース sock[n]=socket(AF_INET,SOCK_STREAM,0); if(WSAAsyncSelect(sock[n],hW,SM_ASYNC,FD_CONNECT|FD_CLOSE|FD_READ|FD_WRITE)) lpServEnt = getservbyname("http", "tcp"); if(lpServEnt==NULL) { ser.sin_port=htons(80); } else { ser.sin_port=lpServEnt->s_port; } lpHostEntry=(LPHOSTENT)bufHostEnt; ser.sin_family=AF_INET; ser.sin_addr=*((LPIN_ADDR)*lpHostEntry->h_addr_list); if(SOCKET_ERROR!=connect(sock[n],(LPSOCKADDR)&ser,sizeof(SOCKADDR_IN))) HTTPだと駄目なのですが、SMTPやFTPならうまく接続できて、データも転送できます。 なぜ、HTTPだけ接続できないのでしょうか?
>>510 あと、
if(WSAAsyncSelect(sock[n],hW,SM_ASYNC,FD_CONNECT|FD_CLOSE|FD_READ|FD_WRITE))
の部分は、訂正して、
WSAAsyncSelect(sock[n],hW,SM_ASYNC,FD_CONNECT|FD_CLOSE|FD_READ|FD_WRITE);
ifは無しということで・・・・。
ネットワークスレのが回答付きやすいと思う
昔、Cか宿題スレあたりで見たHNだな >>コロ助
>>510 ser.sin_zeroをゼロで初期化してやればいいんじゃない?
515 :
デフォルトの名無しさん :02/12/15 06:17
リストビューの詳細表示を作っているのですが、ちょっと困っていることがあります。 デフォルトの背景ではなく、過去に選択された回数によって、 背景の色を変えたいのですが、いくつか問題があります。 オーナードローで書くとなると、文字まで全部自分で書かないといけないので大変すぎます。 また、項目によって、色を変えるための情報をどこに入れたら良いのかもわかりません。 ListView_SetItemStateで設定できるのも少ないです。 グローバルにしてしまうと、更新タイミングで値が狂うのでだめです。 どうしたらいいでしょうか。
nm_customdraw
517 :
名無し@沢村 :02/12/15 21:20
皆々様方〜、教えてくださらんか〜!! それは画面のちらつきについてだが、私は最初WM_PAINTメッセージの中でペイントしてInvalidateRectで再描画するという方式だったのよ。 でもこれだとどうしても画面がちらついてしまうので、WEBで検索してダブルバッファ方式を採用したのよ。 この検索したページのダブルバッファ方式というのは裏画面にCreateCompatibleBitmapでビットマップをつくっておいて、 描画はすべて裏画面におこない再描画するときは裏画面のビットマップを表画面に転送するというものなのよ。 これでとりあえずは全然ちらつかなくなったのよ。 でもこれだと多分モニターかグラフィックボードの性能が悪いためだと思うけど、10秒くらい放っとくと突然画面にちゃんと色が出なくなってしまうのよ。 でも他のソフトなんか画面はちらつかないし、何時間やっても画面の色が出なくなることはないので、もっとうまいちらつき防止策をやっているはずなのよ。 まあ、WM_PAINTメッセージの中でペイントしてInvalidateRectで再描画しても10秒とまではいかないが、5分ほどで画面の色が出なくなってはいたわな…。 おそらくBITBLTを多用したためだという節が臭いわな…。 皆々様方〜、性能がボロっちいモニターやグラフィックカードでも他のソフトみたいに画面の色が出なくなったりしないいい方法を教えてくださらんか〜、皆々様方〜、お願いします〜♪
519 :
デフォルトの名無しさん :02/12/15 23:19
>>517 セーフモードで動かしてみるべし。それでだめなら性能がボロだからではなく、あんたのプログラムがおかしい。(たぶんリソースの解放漏れ)
520 :
名無し@沢村 :02/12/15 23:21
皆々様方〜、再描画における突然色が出なくなる問題だが、原因を突き止めたぞ、皆々様方〜♪ 皆々様方〜、その原因というのはブラシとペンを多用しすぎていたためじゃ〜! 試しにブラシとペンをうんと減らしてみたら突然色が出なくなることはなくなった…。 ただ、あまり減らしすぎたんで、今度は画面のみてくれがしょぼくなってしまった…。 なんとかしょぼさを最低限に食い止めるためには、どうしてもあとひとつペンヲ増やす必要があるのだが、増やして大丈夫だろうか? また突然色が出なくなったりしないだろうか? 皆々様方〜、ブラシとペンはいつくまでつくっても画面がおかしくならないか、教えてくだされ〜、皆々様方〜♪
>>520 ちゃんと使ったら解放してるか?GDIオブジェクト。
>>520 リソースメータ起動させて、様子見ながらやれよ。
523 :
名無し@沢村 :02/12/16 00:11
皆々様方〜、ダメだ。ブラシ2、ペン3ではあまりみてくれがしょぼかったんで、 ブラシ2、ペン4に増やしてみたところ、長持ちはするが、やはり5分くらい再描画を繰り返すと、 突然画面に色が出なくなってしまうのよ。 どうもブラシ2、ペン3というのが、画面の色が出なくならないリミットらしいが、これだとあまりにしょぼすぎて完成作品がイヤになるわけよ。 どうしてもブラシ2、ペン4に増やしたいんだがなあ…。何かいい方法ない? ところでリソースメータって何?フリーでありますか?それはどこからダウンロードできるのですか?
マルチポストだからじゃない?
527 :
名無し@沢村 :02/12/16 00:21
>>524 GDIオブジェクトというのは知らんが、GetDCで得たDCはReleaseDCしてるし、
BeginPaintで得たDCはEndPaintしてる。
裏画面用のmemDCは複数の関数で使うからグローバルにして、WM_DESTROYメッセージの中でDeleteDCしてる。
ペンとブラシのハンドルもDeleteObjectしてる。
これですべてだが、あと何かぬかりない?
また
DeleteObjectのまえにSelectObjectで指定をはずすのを 忘れているに400デュカーティ
529 :
名無し@沢村 :02/12/16 00:50
皆々様方〜、原因はペンとブラシの数にもあるが、それ以上にBITBLTを多用することにあるんじゃないかなという気がしてきたよ。 というのもリソースメータがアクセサリーの中に入っていたのを偶然発見しさっそく起動させて監視してみたところ、システムリソースとGDIリソースというのが見る見る少なくなっていくのがわかったからよ。 というのも私はファイルのデータの数だけforループさせてその分だけBITBLTで描画しているため何千回、何万回とBITBLTを使って広大な領域に描画していることになるわけよ。 何か常識で考えても何千回、何万回とBITBLTを使ったら画面がおかしくなりそうな気がしてきたわけだが、何千回、何万回もBITBLTを使って広大な領域に描画したら画面がおかしくなりますか? 教えてくだされ〜、皆々様方〜♪
沢村がもうすぐアク制かけられるに3000BitBlt。
プログラムを良く分かってないアフォがやることとしては
普通だと思うんだが、いかんせん書き方がウザイな。
>>529 テストするだけのプログラムを作って挙動を確かめては?
>>529 >DeleteObjectのまえにSelectObjectで指定をはずすのを
>忘れている
>>529 DeleteObject()に渡すハンドルの値と、その返り値を見てみろ。
534 :
名無し@沢村 :02/12/16 20:17
>>532 SelectObjectで指定をはずすとはどういうことですか?
それはどうやるのですか?
>>534 SelectObjectの返り値は何のためにあると思ってんだ…
>>534 SelectObject(hdc, (HGDIOBJ)rand());
それは(゚д゚)ウマー
538 :
デフォルトの名無しさん :02/12/16 23:43
ダブルクリックをするとき、 1度目をクリックしてから2度目をクリックするまでに ダブルクリックとみなされるポインタ移動量の許容範囲を知りたいのですが、 調べることのできる関数ってないですか?
>>534 ペンもブラシも、デバイスコンテキストに選択したままだと削除できんから。「最初に選択されていたペン」「最初に選択されていたブラシ」を選択し直せば、選択解除される。
>>535 も参照
541 :
デフォルトの名無しさん :02/12/17 05:50
Win32APIはフリーソフトですか? どこでダウンロードできますか? 教えてください
ダウンロードでも何でも貴方の脳内でお好きなだけどうぞ。
>539 ありがとう! わかりました!
>>541 MXにwindowsっていうのがあるからそれ落とせ
545 :
デフォルトの名無しさん :02/12/17 14:04
ExcelのVBAを使って、IE(HTMLページ)上のドロップダウンリストの 各アイテムの文字列を取得しようとしたところうまくいきませんでした。 通常のアプリケーションにあるドロップダウンの場合には、正しく 取得できるのですが、IEのドロップダウンだと文字化けしたような ものが返ってきます。 以下のようにSendMessage()で取得しようとしています。 SendMessage hWnd, CB_GETLBTEXT, idx, str hWndはドロップダウンのハンドル、idxは取得したいアイテムの インデックスを指定しています。 ドロップダウンは以下のような<SELECT>タグでできるやつのことです。 <select> <option>abc</option> <option>def</option> <option>ghi</option> </select> IE上のドロップダウンの文字列を取得する方法をご存知の方、よろしく お願いします。
IEのドロップダウンはウィドウではないが hWndはどこから湧いてきたんだ?
FindWindowExです。 クラス名はInternet Explorer_TridentCmboBxというものみたいです。 よろしくお願いします。
あれはhWnd持ってないはず
549 :
デフォルトの名無しさん :02/12/17 20:50
>>544 ありがとうございました
ところで、Win32APIは何をするソフトなのでしょうか?
お願いします
>>545 HTML取得してあるんだったらHTMLから取得したほうが早くないかね。
TreeView の表示フォントを変更するにはどうしたらよい?
553 :
デフォルトの名無しさん :02/12/18 02:29
Win82API に、非公開ファンクションとして、IsSheAVirgin というものが あるということがわかりました。 戻り値は BOOL ということまでわかったのですが、引数がわかりません。 どなたか教えて下さい。おながいします。
やっぱ自分でおもしろいと思ってるからageてるんだろうな
( ゚д゚)ポカーン
痛々しいな
557 :
デフォルトの名無しさん :02/12/18 03:02
何だ、馬鹿の国から馬鹿を宣伝しに来た馬鹿か?
>>558 おいおい。失礼なこと言うな。
あちらではバカは崇拝の対象なんだから。
郷に入られてもあちらの郷を知る努力くらいしてやれ。
馬鹿の国から出て来た時点で、馬鹿の方が郷に従うべし。
561 :
名無し@沢村 :02/12/18 09:40
>>540 すまんス。
「ペンもブラシも、デバイスコンテキストに選択したままだと削除できんから。「最初に選択されていたペン」「最初に選択されていたブラシ」を選択し直せば」の意味がわからんス。
ちなみに、私がやってみたのは、
ペン、ブラシの作成は、
void CreatePen_Brush()//ペンとブラシを作成
{
hBrush=CreateSolidBrush(RGB(255,255,255));
hBrush2=CreateSolidBrush(RGB(192,192,192));
hPen=CreatePen(PS_SOLID,1,RGB(192,192,192));
hPen2=CreatePen(PS_SOLID,1,RGB(0,192,0));
hPen3=CreatePen(PS_SOLID,1,RGB(255,0,0));
hPen4=CreatePen(PS_SOLID,1,RGB(0,0,0));
}
の中で行ない、
描画でSelectObject(hMemDC,hPen2);みたくデバイスコンテキストにhMemDCを選択してるから、
削除は、
void DeletePen_Brush()//ペンとブラシを削除
{
if(hBrush)DeleteObject(SelectObject(hMemDC,hBrush));//ブラシ削除
if(hBrush2)DeleteObject(SelectObject(hMemDC,hBrush2));//ブラシ削除
if(hPen)DeleteObject(SelectObject(hMemDC,hPen));//ペン1削除
if(hPen2)DeleteObject(SelectObject(hMemDC,hPen2));//ペン2削除
if(hPen3)DeleteObject(SelectObject(hMemDC,hPen3));//ペン3削除
if(hPen4)DeleteObject(SelectObject(hMemDC,hPen4));//ペン3削除
}
でいいのですか?
値追うの面倒だからもしかしたらあってるかもしれんがそのやり方、なんか妙だぞ?
563 :
名無し@沢村 :02/12/18 09:47
ただリソースメーターを起動してみたところ、これでもGDIリソースとシステムリソースがどんどん減るっス。
564 :
名無し@沢村 :02/12/18 09:49
ただ画面から色が出なくなることはほとんどなくなったっス。 でもリソースの減り方が気になるっス…。
>>563 さて、結局どのGDIリソースが解放されてないのか追ってみよう!俺は嫌だ。
566 :
名無し@沢村 :02/12/18 09:52
>>565 どのGDIリソースが解放されてないのかはリソースメーターではわからないのですか?
リソースメーターに減っているリソースを特定するオプションはついていないのですか?
またフリーソフトでどのGDIリソースが解放されてないのか調べることができるのはありますか?
>>566 お前の挙げたコードの時点で明らかにおかしいんだから初心者本なりリファレンスなり見て書き直せ。
沢村氏ね
hOldPen=SelectObject(hMemDC,hPen); : SelectObject(hMemDC,hOldPen); DeleteDC(hMemDC); リファレンス嫁
570 :
名無し@沢村 :02/12/18 10:15
>>569 hOldPenは削除しなくてもいいのですか?
572 :
名無し@沢村 :02/12/18 10:20
>>569 hOldPen=SelectObject(hMemDC,hPen);
hOldPen=SelectObject(hMemDC,hPen2);
hOldPen=SelectObject(hMemDC,hPen3); :
SelectObject(hMemDC,hOldPen);
DeleteDC(hMemDC);
ですか?
それとも、
hOldPen=SelectObject(hMemDC,hPen);
hOldPen2=SelectObject(hMemDC,hPen2);
hOldPen3=SelectObject(hMemDC,hPen3); :
SelectObject(hMemDC,hOldPen);
SelectObject(hMemDC,hOldPen2);
SelectObject(hMemDC,hOldPen3);
DeleteDC(hMemDC);
ですか?
前者は意味ないだろう…
574 :
名無し@沢村 :02/12/18 10:23
>>571 SelectObject(hMemDC,hOldPen);
DeleteDC(hMemDC);
DeleteObjectC(hOldPen);
ですか?
それとも、
SelectObject(hMemDC,hOldPen);
DeleteObjectC(hOldPen);
DeleteDC(hMemDC);
ですか?
>>574 つぅかペン切り替えになぜDCを破棄する。
576 :
名無し@沢村 :02/12/18 10:25
あ、わかった。 hOldPen=SelectObject(hMemDC,hPen); hOldPen2=SelectObject(hMemDC,hPen2); hOldPen3=SelectObject(hMemDC,hPen3); : SelectObject(hMemDC,hOldPen); DeleteObjectC(hOldPen); SelectObject(hMemDC,hOldPen2); DeleteObjectC(hOldPen2); SelectObject(hMemDC,hOldPen3); DeleteObjectC(hOldPen3); DeleteDC(hMemDC); だね〜。違う?
>>576 hOldPen=SelectObject(hMemDC,hPen);
hOldPen2=SelectObject(hMemDC,hPen2);
hOldPen3=SelectObject(hMemDC,hPen3);
わかってない。
CreateDC→CreatePenならDeletePen→DeleteDC CreatePen→CreateDCならDeleteDC→DeletePen 作成した順とは逆に開放するのが望ましい …
>>576 Pen切り替えすぎだろう…
Pen3しか生きてない
沢村様専用スレはここですか
581 :
名無し@沢村 :02/12/18 10:34
え〜と皆々様方、まとめますとですね〜♪ hPenやhPen2やhPen3は描画関数の中で破棄する。 DCは描画関数の中で破棄すると再描画されなくなるので(というのは複数の関数で使うためグローバルにして関数の外でGETしているため) 最後にWM_DESTROYメッセージの中で破棄している。 その際、最初に選択されていたDCに戻すためhOldPenというのをわざとつくって、SelectObject(hMemDC,hOldPen3);でDCを最初に戻したあと、DeleteDC(hMemDC); でDCを破棄する…と、まあこんな感じでいいのですか?
Yes. ----------------------------------------------- CR
583 :
デフォルトの名無しさん :02/12/18 10:38
main(argv,argc)のargv[0]と同じ文字列(exeのフルパス)を 取得するAPIはありますか?
沢村よ、お主はDCがそもそも何なのかがわかってないのと違うか?
いっぺんCreateXXX,SelectObject,DeleteObjectが何をしているのかを
図解説明してみてはどうだ,自分に対してでいいから
脳内で説明ついてないと
>>576 のような変なコードを書くことになる
面倒だろうがちゃんと紙に書いてみろ,断片的なアドバイスより為になるぞ
>>583 >main(argv,argc)
おかしいぞ。後、winmain()の引数に入ってる。
>>583 main(argc,argv)な
GetModuleFileName
> DC ダ・カーポでつか? 直流電源でつか?
588 :
名無し@沢村 :02/12/18 10:43
>>583 winmain()の引数のLPSTR lpszCmdLineというのが、main(argv,argc)のargv[0]と同じ文字列(exeのフルパス)を 取得するAPですよ。まかせなさーいって!!
>>587 何を煽ってるか知らんがdevice context WindowsAPI使いなら常識かと。
> lpszCmdLineというのが、main(argv,argc)のargv[0]と同じ文字列 (゚Д゚)ハァ?
>>592 ・・・アプリケーション?
どうでもいいが質問者はMFC使ってるに3hThread
アクセスポイント? --- argv[0] != LPSTR lpszCmdLine
596 :
名無し@沢村 :02/12/18 10:52
>>584 わかってないよ。そもそも俺はプログラマーではないからな。それはおろか学校でも習ってないし、情報処理技術者の資格すら持たんよ。
完全なド素人だよ。本ちょっと読んで覚えかじっただけ!!知らなくて当たり前だろ!!
だからもっと親切に教えてくれよな?
まあそんな俺でも昔某社のプログラムコンテストで1位になったことがあるんだよ。すごいだろ?
>>595 ふと思ったけどじゃあコマンドラインオプションって自分で切り出さないといけないわけ?
> どうでもいいが質問者はMFC使ってるに3hThread どうしてそう思ったのか訊きたいけど
Iは書いてないな。 でもAPってなんの意味だ?
600 :
デフォルトの名無しさん :02/12/18 10:54
沢村最高〜!!
PENの問題は解決したのか・・・?
>>597 その通り。
ただし、NT には CommandLineToArgvW() がある。
>>597 他は知らないけど俺は切り出してargv[]につめこんで
アダプタ通してアクセスしてる
> だからもっと親切に教えてくれよな? > まあそんな俺でも昔某社のプログラムコンテストで1位になったことがあるんだよ。すごいだろ? あほらし。
607 :
名無し@沢村 :02/12/18 10:58
>>584 まあ昔ちょっとプログラマーやってたことはあるよ。
経営者が20代の何も知らんやつで社員数4〜5名のちいさな会社でコンピュータのこと何も知らんやつばかりだったから昔某社のプログラムコンテストで1位になったこと言うと、間違ってプログラマーで採用してくれたんだ。
その会社はすぐつぶれたけどね。
はっきり言って俺はプログラムの完全なド素人だね!!
> 完全なド素人だよ。本ちょっと読んで覚えかじっただけ!!知らなくて当たり前だろ!! 知らない事が当たり前かどうかは知らないが、知らない事があったら勉強しようとするのが 当たり前。
> はっきり言って俺はプログラムの完全なド素人だね!! いばるな。
沢村に訊く。 馬鹿の国から馬鹿を宣伝しに来たような見事な馬鹿とはお前の事か?
612 :
名無し@沢村 :02/12/18 11:05
>>608 知らない事があったら2chで聞いて勉強するの。
それも立派な方法。
613 :
デフォルトの名無しさん :02/12/18 11:07
まともな解答がつくか怪しい方法を立派と呼べるかは疑問。 とりわけ、そのように人の労力にあて込んで自助努力をしない人の場合では。
616 :
名無し@沢村 :02/12/18 11:09
俺はプログラムの素人だぜ。 プログラマーと知り合うチャンスはなかったよ。 プログラマーに誰一人知り合いはいねーよ。
618 :
名無し@沢村 :02/12/18 11:12
>>614 俺は結構努力をするほうだぜ。
そのような努力があったから、昔某社のプログラムコンテストで優勝できたのよ。
じゃ自分で調べて下さい
620 :
デフォルトの名無しさん :02/12/18 11:15
584 に対して 596 のようなレスを返した人間の吐いたセリフとは思えんな。
>>618 教えて君が立派と言っているおまえが努力家なわけねぇだろ
あの程度の質問なら普通、猫でもROMってくるもんだぜ
つーか、沢村はまず腹筋 100 回。 話はそれからだ。
> 猫でもROMってくる 意味がちょっとおかしいと思うんですけど
お前ら!! 沢村の気持ちも考えろよ!! 沢村はな!! 沢村は・・・ ・・・すまん、漏れもよくわからん
(´-`).。oO(とうとうこんな日が来たか。。。)
沢村ってポケモンじゃなかったっけ? www.nintendo.co.jp/n01/n64/software/nus_p_nalj/smash/Pokemon.html
とびげり?
>>627 そうだ。ダウソしたポケモンII。プレイしかけだったんだ。思い出した。ありがとう。
(でも、昔のSAGA3の様な新鮮さが無いのはなぜだろう・・・。)○。
飛び下痢? イ、イャアァァァァァァァ・・・
>>596 それは漏れも同じだ
Win32は社会人になってから同僚と一緒に憶えたし
情報処理技術者の資格取るときに勉強したこともWin32とは全然関係なかった
本を読みかじって覚えたのも同じさ
漏れなりに親切に教えたつもりだが?
ちゃんと紙に書けと言っただろ
それは漏れ自身がWin32を覚えるときの鍵になったことだからだ
大学ノート数冊使い切るくらい書きまくれ
腕利きのプロも元はど素人
断片的な質問よりどうやって這い上がったか訊いてみろ
> 断片的な質問よりどうやって這い上がったか訊いてみろ 変な誘導は止めてくれ むしろ板の平和の為に、去ってくれるように仕向けていただけると
逃げろ
>>632 変な誘導とは何のことだ
コテハン叩きの邪魔がイヤなのか
>>636 沢村が聞き込みを始める恐れあり
>>636 沢村が聞き込みを始める恐れあり
ここはWin32API 質問箱
638 :
デフォルトの名無しさん :02/12/18 11:44
584は沢村にWin32APIの事を教えていたような・・・
ここが噂の沢村スレですか
ついに本性を表したか教えてクンが
>>ALL つーか沢村はネタだろ・・・
最初から放置しておけばいいものを。 これまでもこのスレや他のスレで散々奴の醜態を見てきただろうに。 ここまでくると教えてやろうと思ってる奴も相当痛い。無駄な努力はよせ。
つーか、petzold本嫁。以上。
645 :
戸塚ヨット :02/12/19 09:56
自分は初心者なんですが、 みなさんはwin32でくむとき本か何かをそばに置いてくむんですか? それともあの膨大な量の関数やら構造体やらすべて覚えていらっしゃるのですか?
>>645 Win32自体については本ではなくMSDNライブラリ(VCヘルプ)で見てる
机の上の紙類は,作ろうとしてるアプリの内容に関わる資料だ
Win32 を一言で表すと?
>>645 Windowsプログラム初心者のときはペゾルト本見てた
基本はMSDNをみながら、どうしても分からなければ参考になりそうなものを検索 間違ってもBBSなんかで質問はしない
>>652 そうだな
たまに珍しい話を見かけて
それについてMSDNを調べることはあるが
DialogBoxでリソースからモードレスダイアログ作って、 WM_INITDIALOG 時に、ダイアログ上にある Edit にテキストをセットすると、 全て選択された状態で表示されるんですが 選択範囲を解除するには、どのタイミングで EM_SETSEL を 送ればいいんでしょうか? WM_INITDIALOG で送ると上手くいかないっぽいです。
655 :
デフォルトの名無しさん :02/12/19 18:42
質問です。 SetWidowLong()でスタイル変更した後、SetWindowPos() で SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED を指定してるのですが、再描画されません。 (その後、ウィンドウをつまんで移動させたりすると再描画されます) 下がその部分のコードなのですが、なにか足りないものがあるのでしょうか? SetWindowLong( GetDlgItem(hDlg, IDC_UNLOADHOOK), GWL_STYLE, nLastLong | WS_DISABLED ) ; SetWindowPos( hDlg, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED );
すいません、自己解決しました。 0を返さないといけなかったようでつ。
658 :
名無し@沢村 :02/12/19 20:25
皆々様方〜、教えてくだされ〜♪ それはトラックバーだが、現在3つのトラックバーとその他いろいろなコントロールをつけているのよ。 で、その3つのトラックバーのうちの一つだが、ウインドウを最小かしてもとにもどしたり、ファイルを開くダイアログを開いてその中のフォルダを開いたりすると消えるのよ。 もろもろのコントロールの中で、その3つのトラックバーのうちの一つだけが消えるのよ。 ためしに3つのトラックバーの順序を入れ替えてみたら消える位置に入れ替えたトラックバーがやはり消えた…。 最初FillRectで画面全体を塗りつぶしていたので再描画のとき下に隠れて描画されていないのかと思ったが、 手さぐりでいくらクリックしても反応ないのでどうもトラックバー自体がなくなってるみたいです…。 皆々様方〜、どうすればこれが直るのですか?教えてくだされ〜皆々様方〜♪
↑相手にしない
(・∀・) ニヤニヤ
>>641 ありがとやした。
ところで、TreeView の各アイテム毎に指定する必要がない場合でも
個々にカスタムドローしないといけないもんなんでしょか。
なんか方法がありそうな気はするんですがわからんちんです。
662 :
デフォルトの名無しさん :02/12/19 23:31
C++スレよりやってまいりましたっ C++で作成したアプリケーションについてですが Spy++とかで確認することができる クラス名があるじゃないですか。 あれはバイナリ(exe)にはどんな風にして格納されてるんでしょうか? やりたいことはメインウィンドウのクラス名を バイナリエディタで書き換えたいのです。 よろしくおながいします(´・ω・`)
沢村はリソース問題は解決したのかはっきりすべし。 その返答次第では斬る。
665 :
デフォルトの名無しさん :02/12/19 23:39
>>661 SETFONTじゃ変わらなかったっけ?
>>664 トリップも付けてないし途中で出現した奴は騙り荒らしだろ
>>663 単なる静的文字列として格納されているかもしれないし
リソースとして格納されているかもしれないし
それはアプリの実装次第。
669 :
名無し@沢村 :02/12/20 00:22
>>664 リソース問題はまだ解決しとらんよ。
長時間使ってみることがないので、いまのところ問題は生じとらんので、とりあえずほっといて、次をやってるところ…。
沢村は斬られますた
また、つまらぬものを…
つまり、みんなの善意は無に帰した訳だ。 そりゃぁ、五右衛門も我慢ならねぇわな。 おいルパン。次行こうぜ。
>>668 えっとですね、そのアプリは多重起動を防止しているんですが、
おそらく、ウィンドウクラス名でチェックしてるんではないかなと思って
それを解除したかったのです。
ちなみにタイトルのキャプションは見てないようでした。
よろしくお願いします。
>>667 アプリの実装しだいというのはどういうことでしょうか?
ちなみに静的文字列ではないようでした。
バイナリエディタで検索してみたのですが、見つからなかったので・・・。
>>673 Mutex とかは?
>>674 本当?
それが UNICODE アプリだったりした場合は UNICODE で格納されているけど。
>>674 普通はミューテックスを使うと思う
圧縮されいることもあったりする
>>675 StirlingのコードセットをUnicodeにかえて
検索してみましたが発見できませんでした・・。
>>675 ,
>>676 ・Mutexについて
もしMutexを使用していた場合、
対象バイナリを変更することによって
多重起動を可能にすることは可能なのでしょうか?
以前・・・かなり昔ですが・・・多重起動が禁止されている
ソフトを多重起動可能にする(100%ではない)
ユーティリティがあったのですが
どうやってやっていたのか不思議です。。。
バイナリが2バイトだけ直接書き換えられていました。
検索してももう見つからなかったです。
起動チェック用Mutexの作成失敗時における 条件分岐を潰すだけだろ。
それか、Mutexを識別する文字列をちょこっとだけ変えるとか。 でも、プログラム勝手に変えちゃダメだぜ。カタギの人なら。
そうなん? ライセンスで別途禁止されていなければ プログラムの著作物に関しては 電子計算機においてより効果的に利用し得るようにするために 必要な改変は認められるって例外規定があったような
682 :
名無し@沢村 :02/12/20 18:45
皆々様方〜、リソースのちゃんとした開放について考えてるうちふと思ったんだが、 DeleteObject(hPen); のかわりに、 Zeromemory(hPen,sizeof(hPen)); っのは使えるの?なんかこっちのほうがちゃんと開放されそうな印象だが…。
ハンドルってそういうことが出来ない様に抽象化されたものじゃないの? HBITMAPやHFONTも4バイトで済むとお思いか?
>>682 Cを一から勉強することをオススメする。
ちなみにあなたの言っていることは、
「char *x=malloc(128);と確保したメモリを、
free(x);のかわりにx=0;にした方がいいのでは?」
という質問とあまり変わらなかったりする。
DeleteObject==ZeroMemoryとなぜ思ったのですか? Deleteが付けばメモリクリアする物だと思ってるのですか? 先生の薬をちゃんと飲みましたか?
>>679 そのユーティリティは対象アプリのパスを渡すだけで
バイナリを自動的に修正していました。
外部から条件分岐の場所を判別することって
できるものなのでしょうか?
>>680 Mutexを識別する文字列はどのようにして
格納されているのでしょうか?
VC++でビルドされたものと限定しても構いません。
これがわかればそこを数バイト書き換えれば
うまくいきそうですね。
687 :
名無し@沢村 :02/12/20 19:44
>>684 >>685 リソースを開放することと、メモリをクリアすることは違うのですか?
リソースって結局メモリのことだよね?
するとクリアと開放の違い…?
そもそも開放とは何なのですか?
688 :
デフォルトの名無しさん :02/12/20 19:49
>>687 根本的に判ってない。
>リソースって結局メモリのことだよね?
違う。「リソース=資源」。メモリに限らず、デバイスとかもリソース。
リソースの確保とは、「これから漏れが使うから、他のヤシに使わせないように汁!」で、
リソースの開放とは、「使い終わったから、他のヤシに使わせて良いよん」である。どうやって
確保するかは処理系によって変わる。
って、WinAPIのスレだった…「どうやって…」以降は蛇足だな。
690 :
名無し@沢村 :02/12/20 19:59
>>688 他のヤシとは他のソフトのこと?
hDC=GetDC(hwnd);
でデバイスhDCを確保した場合、その前にhDCを使っているソフトがあるということ?
hDCをhxxxxyyyyDCと恐らく誰も使わない名前にした場合も、他にもhxxxxyyyyDCを使っているソフトがあるから、
他のヤシに使わせないように汁、だったり、他のヤシに使わせて良いよん、だったりするわけ?
691 :
名無し@沢村 :02/12/20 20:07
また、プログラムの中でリソースを確保する部分はいくつかに決まっているから、 最初リソースを確保したら、最初確保した分だけリソースが減ってあとは減らないはずなのに、 使っているうちどんどん減っていくのはどうして?
693 :
名無し@沢村 :02/12/20 20:15
あ、わかった。関数の中でリソースを確保したり開放しているからだ! だからちゃんとリソースが開放されていないと、関数を呼び出した回数だけどんどんリソースを確保していくことになるから、リソースがどんどん減っていくんだ!! だとすると…解決方法がわかったぞ!! リソースをグローバルにして確保と開放を関数の外のプログラムの最初と最後の部分で1回だけやればいいんだ!! そうするとちゃんと開放されなくてもリソースはどんどん減ることはない…と思うがどうですか?
( ´,_ゝ`) プ
もはや「Win32API 質問箱」ではないな
>>沢村 問題に対する対処方法が間違っている 「こうじゃないかな」 という解決方法を思いついた時はまず自分で確かめろ 確かに答えを知っている人に答えを教えてもらった方が 楽だし速いかもしれないが、この方法では近いうちに壁にぶつかる あと、ここは「Win32API 質問箱」であって「沢村質問箱」じゃない
>>686 CreateMutexかGetLastErrorをフックしたらいけるかな。
698 :
デフォルトの名無しさん :02/12/20 20:36
>>639 沢村君・・・
まさか、ずいぶん前に君がレスしたリソースの解放について、
まだ解決してなかったのかい?
間違いた。 >693へのレス
700 :
名無し@沢村 :02/12/20 20:40
>>698 もう解決したよ。
リソースの開放の仕方はいまいちわからないが、プログラムの初めでリソースを1度だけ確保し、終わりに開放すれば、リソースがどんどん減ることはないということがわかったよ。
とりあえず、これで充分だよ♪
if(y.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ これってどういう意味ですか? 何を調べてるのか教えてください。
MFCアプリの場合は、ウィンドウクラス名は動的に生成されているがな
「お前が何を調べているのか」教えろ
704 :
名無し@沢村 :02/12/20 20:53
>>701 君、y.dwFileAttributesが何なのかはよくわからないが、恐らく処理系で定義されているファイル属性についての構造体だろう。
またFILE_ATTRIBUTE_DIRECTORYというのは、言葉の意味から「ファイル属性はフォルダです」という直訳が出てくるよ、君!!
そうすると & は論理and演算子だから、「もしy.dwFileAttributesが「ファイル属性はフォルダです」ならば」という直訳が出てくるよ。
そうすると漠然とながら意味がわかるだろ?どうかね、君!?
705 :
名無し@沢村 :02/12/20 21:21
>>701 君、お礼は!?君!?
いいかいくだいていうと、FILE_ATTRIBUTE_DIRECTORYは多分ファイル属性を表わす定数なんだよ。
何とか.hの中で
#define FILE_ATTRIBUTE_DIRECTORY 1
みたく定義されているはずなんだ。
また恐らく他にも、
FILE_ATTRIBUTE_xxxとか
FILE_ATTRIBUTE_yyyとか
FILE_ATTRIBUTE_のつく定数がたくさん定義されているはずなんだ。
そして、y.dwFileAttributesも多分ファイル属性についての構造体メンバで、
if(y.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
以前にy.dwFileAttributesにFILE_ATTRIBUTE_のいずれかが代入されているはずなんだよ。
だからif(y.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ はどのFILE_ATTRIBUTE_が代入されているかを調べているのだと思うよ。
というよりFILE_ATTRIBUTE_DIRECTORYが代入されているかどうかを調べていると言ったほうがいいだろうね。
そして、y.dwFileAttributes かつ FILE_ATTRIBUTE_DIRECTORYが真ならば、
つまりy.dwFileAttributes が FILE_ATTRIBUTE_DIRECTORYかどうかを調べているというわけだよ。
これならば馬鹿でもわかるよね?
君、俺はプログラムのド素人なんだよ!!ビックリしたかい?
お礼を強要するんなら帰れ
レスが飛んでる… 沢村?w NGワードにしたら気分爽快♪
みんなよくネタ荒らしに付き合ってられるほど暇だよな
709 :
デフォルトの名無しさん :02/12/20 21:27
>>701 の質問は(゚Д゚)ハァ? と思ったが、沢村に回答されて
正直
>>701 が哀れに思ってきたのは漏れだけだろうか…
>>704-705 どうもありがとうございました。
とりあえず、y.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORYが真だと
ディレクトリだということですね。
なんとなく理解できました。そして、手元のソースも理解できました。
712 :
デフォルトの名無しさん :02/12/20 21:29
沢村、その調子だ。俺は応援しているぞ!!
沢村のジサクジエン…
沢村ウザいなあ。 リアルなら嫌われ者の癖についてきたがるやつは 殴りつけて追っ払えるのにネット上じゃそうもいかん
>なんとなく理解できました。 なんとなくかよ・・・
716 :
デフォルトの名無しさん :02/12/20 22:00
リストビューでキー入力を無効にしたいのですが、どうしたらいいでしょうか。 デフォルトの動作だとキー入力があると、そのキーと同じ頭文字のところに フォーカスが移動してしまいます。これをやめさせたいのです。 よろしくおねがいします。
718 :
デフォルトの名無しさん :02/12/20 22:41
>>717 ありがとうございます。
でも、それだと、キー入力に対する動作が追加できるだけで、
選択状態を変更されないようにはできないので、困っているんです。
沢村に礼を言われたこと無いが。
720 :
デフォルトの名無しさん :02/12/20 23:21
>>686 ひょっとしてそのユーティリティはWindows3.1用では???
>>718 ↓じゃだめ?
case WM_NOTIFY:
switch ( ((LPNMHDR)lp)->code )
{
case LVN_KEYDOWN:
return TRUE;
}
break;
722 :
デフォルトの名無しさん :02/12/21 01:12
GDIに関して、質問したい事があります。 hDCに対して、3種類のペン、A,B,Cで描画するのですが、この時 SelectObjectで受け取る、変更前のオブジェクトを HPEN prev; prev = (HPEN)SelectObject(hDC, A); /*(描画)*/ SelectObject(hDC, prev); prev = (HPEN)SelectObject(hDC, B); /*(描画)*/ SelectObject(hDC, prev); prev = (HPEN)SelectObject(hDC, C); /*(描画)*/ SelectObject(hDC, prev); のように、毎回新しいオブジェクトを使う前に元の状態に戻すべきですか? それとも、 prev = (HPEN)SelectObject(hDC, A); /*(描画)*/ SelectObject(hDC, B); /*(描画)*/ SelectObject(hDC, C); /*(描画)*/ SelectObject(hDC, prev); のように、最終的に元のオブジェクトに戻っていればOK?
>>722 最終的に元に戻ってりゃOK。
関数内で描いてる場合、その関数を呼んだヤツにバレなきゃいいのさ…
>>722 どちらでもよし。
てか、上しかダメなら「Select」なんて単語つかわんだろ。
むしろ1関数でしか使わないなら元に戻さなくてもよかったり…
私の住んでいる地域では今日から小学校が冬休みです。
こちらの地域では今日から工房以下すべて冬休みです。 おかげで通勤が楽になります。
現在、会社からカキコしてますが何か?
728 :
デフォルトの名無しさん :02/12/21 11:54
システム全体の通信送受信量を返すAPI教えていただけませんか? そういうものがあるって話は聞いたのですが
>>728 始めに断って置くが俺は解らない。
ところで、システム全体ってのはどういう意味なんだろう。
例えばネットワークカード2枚入っている場合はそれらの合計?
それともシステム内でパケットを飛ばしている場合はそれも含める?
説明不足ですみません。 NICの合計通信量ということです。ローカル内での通信は抜きで。 多分用意されているのはそういうAPIかと思います。 送受信量をリアルタイムに表示するプログラムを作りたいのです。
731 :
デフォルトの名無しさん :02/12/21 12:58
すみません、SDKプログラミング1ヶ月の初心者です。 いろいろ調べてみたのですが分かりませんでした。教えてください… 例えば、Outlook Express(6.0) のメールのリストを見ると、選択した アイテムでも「送信者」より左側の部分は反転表示になっていませんよね。 このように、レポート形式のリストビューを、サブアイテム単位で 反転(選択)状態にするにはどうすればいいのでしょうか?
>>730 Windowsのネットワークのプロパティを見れば出てくるから
方法はあると思うんだけれど…
ちょっと解らないです。面白そうだから調べてみようかな
>>731 俺はOutlook使ったことが無いのでわからないけれど、
直感的にカスタムコントロールを使ってる気がする。
spy++等でwindow classを調べてみるところから初めてみるといいかも。
>>730 随分時間がかかったけど、大体わかりました。NetBIOSを使えば出来そうです。
#SNMPから調べていたためにいらぬ時間を取ってしまった
サンプルコード書いてみましょうか?
>>733 おお!
どうもありがとうございます。
NetBIOSですか・・・
是非サンプルお願いします。
>>734 サンプル書いたらsent/receive共に0になりますた(涙
netBios::ADAPTER_STATUSは使えない模様です。
もう少し調べてみよう…ぬか喜びさせてしまいスマソ
GetIfEntry の dwInOctets; // octets received dwOutOctets; // octets sent じゃねーのか?
随分長い間調べてしまった……
>>736 MSが表示しているのは、そこではなくてunicast packetsの方みたいです。
dwInUcastPkts; // unicast packets received
dwOutUcastPkts; // unicast packets sent
サンプル書いたので、適当に整形して読んでみてください。
なおエラー処理は一切やっていません。あしからず
#include <stdio.h>
#include <winsock2.h>
#include <iprtrmib.h>
int main(void){
HINSTANCE hIpHelpApi=LoadLibrary("iphlpapi.dll");
typedef DWORD (CALLBACK* T_GETIFTABLE)(PMIB_IFTABLE, PULONG, BOOL);
T_GETIFTABLE pfGetIfTable=(T_GETIFTABLE)GetProcAddress(hIpHelpApi,"GetIfTable");
char *buffer=NULL;DWORD buf_size=0;(*pfGetIfTable)((PMIB_IFTABLE)buffer,&buf_size,true);
buffer = (char*)malloc(buf_size);memset(buffer,0,buf_size);
(*pfGetIfTable)((PMIB_IFTABLE)buffer,&buf_size,true);
MIB_IFTABLE* mit=(MIB_IFTABLE*)buffer;
for(int i=0;i< (int)mit->dwNumEntries;i++) {MIB_IFROW* mir=(mit->table)+i;
printf("interface %d:%s\n",i,mir->bDescr);
printf("sent:%d/recv:%d\n\n",mir->dwOutUcastPkts+mir->dwOutNUcastPkts,mir->dwInUcastPkts);
}free(buffer);FreeLibrary(hIpHelpApi);return 0;}
>>737 そこまで親切に書いていただけるとは・・・
2chでこんな優しくされたのは初めて(´д⊂)
まずはこのソースを解読せねば
本質的でない部分もわからとこけっこうありまして
大事な時間を割いて調べていただいて、本当にありがとうございました。
739 :
デフォルトの名無しさん :02/12/21 17:54
>>732 お返事、どうもありがとうございます。
早速クラスを調べてみたら、
"SysListView32"ではなくて
"ATL:SysListView32"になっていました。
これは、やはり"SysListView32"に少し手を加えた
カスタムコントロールと見るのが妥当でしょうか。
勉強してまた出直してきます…
CreateToolbarExでツールバー作るときに256色以上のビットマップを使ったら実行時にエラーが出るんだけど何で?
742 :
名無し@沢村 :02/12/21 20:34
>>722 prev = (HPEN)SelectObject(hDC, A);
/*(描画)*/
SelectObject(hDC, B);
/*(描画)*/
SelectObject(hDC, C);
/*(描画)*/
SelectObject(hDC, prev);
とした後、
DeleteObject(hDC);とするのね。
hDCに対して選択されているObjectを元に戻して削除するのね。
それはわかったぞ!!
わからないのは、PenをDeleteObjectするときは、何をどう元にもどせばいいのですか?
743 :
名無し@沢村 :02/12/21 20:38
つまりhDCを削除するときは、hDCに対して選択されているペンを元にもどして削除する…と。 ではペンを削除するときは、ペンに対して選択されている何を元にもどして削除するのかが、わからないわけ。
>>742 いや、 hDC は DeleteObject しないぞ。
>>742 センスがない。諦めてDelphiでも使う方が絶対にいい
746 :
名無し@沢村 :02/12/21 20:42
>>744 いや、だからキスプリ。
つまりhDCをDeleteDCするときは、hDCに対して選択されているペンを元にもどして削除する…と。
ではペンをDEleteObjectするときは、ペンに対して選択されている何を元にもどして削除するのかが、わからないわけ。
選択はずしたら DeleteObject で OK。
748 :
名無し@沢村 :02/12/21 20:49
>>747 いや、だからそれは、hDCをDeleteDCするときは、hDCに対して選択されているペンをはずしたらDeleteDCでもOK…と。
あ、hDCでもDeleteObjectしてOKなの?
ただ、ペンをDEleteObjectするときは、何をどう選択はずして削除するの?
>>746 DeleteDCって滅多に使わんと思うが・・・まぁいい。
ペンがデバイスコンテキストから選択解除されてれば、いつでもそのペンを DeleteObject で削除できる。
750 :
名無し@沢村 :02/12/21 20:55
>>74 ペンがデバイスコンテキストから選択解除するということは、
ペンをSelectObjectで最初の選択に戻すことと同じなのですか、違うのですか?
また、そうすればペンを DeleteObjectできるのですか?
ではデバイスコンテキストを削除するときは、何をどう選択解除しなければならないのですか?
AはPENで、BはBRUSHで、CはFONTという罠(ワラ
752 :
名無し@沢村 :02/12/21 20:58
>>749 >ペンがデバイスコンテキストから選択解除されてれば、いつでもそのペンを DeleteObject で削除できる。
prev = (HPEN)SelectObject(hDC, A);
/*(描画)*/
SelectObject(hDC, B);
/*(描画)*/
SelectObject(hDC, C);
/*(描画)*/
SelectObject(hDC, prev);
上の例で削除できる「そのペン」とはどのペンのことですか?
prev?A?B?C?
いいから沢村はpetzold本よめ。
>>750 最初のでもいいし、他のペンを選択しても元のペンは選択解除される。
そうすればペンを DeleteObject できるです。
デバイスコンテキストを本当に削除したいのですか?
それはあなたが CreateDC で作ったものでしょうね?
もしそうなら、ペンもブラシもフォントもビットマップも全部、SelectObject で最初の選択に戻してから、DeleteDC すれば良いと思います。
いいから沢村の相手はやめろ。
756 :
名無し@沢村 :02/12/21 21:07
>>754 いや、CreateDCで作ったものではなく、GetDCでつくったもの。
CreateDCというのは知らんでした…。
>最初のでもいいし、他のペンを選択しても元のペンは選択解除される。
そうすればペンを DeleteObject できるです。
prev = (HPEN)SelectObject(hDC, A);
/*(描画)*/
SelectObject(hDC, B);
/*(描画)*/
SelectObject(hDC, C);
/*(描画)*/
SelectObject(hDC, prev);
の場合、次にDeleteObject(prev) してもいいし、DeleteObject(A) してもいいし、DeleteObject(B) してもいいということですか?
757 :
名無し@沢村 :02/12/21 21:12
皆々様方〜私は今回もリソースの開放の問題に挫折したようです…。 また日を改めて質問しますのでその時はよろしくね♪ ま、プログラムの最初に一回だけペンなどのオブジェクトを作っとけば、リソースがどんどん減っていくことはないという必殺技があるから、とりあえずそれで間に合わせときます♪
けっきょく、petzold本よまないつもりなのか、、、
759 :
名無し@沢村 :02/12/21 21:17
>>758 基本的に本は読まないポリシーだが、
ちなみにそれはどこの出版社から出ているのですか?著者は誰ですか?いくらですか?
>>759 お前は、自分で調べることが出来ないのか?
本気で鬱陶しいと思っている。
名無し@沢村 の発言 > 基本的に本は読まないポリシーだが、 > ちなみにそれはどこの出版社から出ているのですか?著者は誰ですか?いくらですか? プログラマに向いてない今すぐやめろ。
っていうかよぉ、とっつぁ〜ん! 沢村は人のレスもマトモに読〜んでないぞぉ。 SelectObjectすらまだ分かってないんだから、たまったもんじゃないぃ。 教え甲斐があるヤツぁいいが、コイツは教え甲斐が全くないんだよぉ。 なぁ?ふっじこちゃ〜ん。
あーあ、ここの厨はいつになったら沢村を放置できるようになるのかね。
764 :
デフォルトの名無しさん :02/12/21 23:40
リッチエディットコントロールで error C2061: 構文エラー : 識別子 'HRESULT' がシンタックスエラーを起こしました。 とエラーが出てしまうのですが、何が原因でしょうか?
バイナリデータ中の 0x15 0xA1 0x6C の3バイトの位置を検索するには 1バイトずつ調べる以外に方法はないんですか? 普通の文字なら strstr() が使えるけど、バイナリのマッチは 一般的にはどうやっているのですか?
>>766 漏れは小さいデータしか扱ったことがないから、データを16進文字列
EA029EF5C0426FFF0A0B
のような文字列に変換して、15A16Cをstrstr関数で検索しているよ。
小さいならこれで逝ける。
ありがとうございます。 でも僕はそれはバグがあると思いますよ。 00010000 に対して 001000の位置を strstr() で調べようとしたら。 でもその考え方は使えそうです。 コンマ区切りとかすれば問題は無いですね。 ありがとうございます。 他にもいい方法があったら教えてください。
バイナリはバイナリで検索すれば良い。 Win32なら_lfindとかね。 リニアサーチが嫌ならば、BM法を使って調べると速くなる
768>> ヤバ!!!!!! 漏れの顔は青ざめた。今日寝れない。でもバグ発見ありがとう。
UINT(4byte)やMMX(8byte)使って検索するとかで検索スピードを 速めることは可能。 さらにデータ配列に一定の規律が守られていればさらに最適化も 可能。例えば、その並びは必ずあるアラインメントで並びが保証され ているとか。
BROWSEINFO構造体のulFlagsに BIF_RETURNONLYFSDIRS を指定してSHBrowseForFolder関数を呼び出すと、 ディレクトリ以外を選択しているときにOKボタンが灰色になります。 ところが ulFlags に BIF_USENEWUI と BIF_RETURNONLYFSDIRS を指定するとディレクトリ以外を選択してもOKボタンが灰色になりません。 BIF_USENEWUI でもOKボタンを灰色にしたいのですがどうすればよいのでしょうか。
苦戦しております。_lfind() の最後の引数が分かりません。 ABと出力するつもりでソースを書いているのですが、最後の引数は 何を書けばいいんですか? #include <windows.h> #include <iostream.h> #include <search.h> main(){ BYTE a[7] = {0x10, 0x11, 0x12, 0x13, 0x65, 0x66, 0x0}; BYTE b[3] = {0x12, 0x13, 0x65}; unsigned int num = 7; unsigned int wid = sizeof(BYTE); char *p; p = (char*)_lfind(b, a, &num, &wid, ?); printf("%s", p); }
>>723 ,724
回答ありがとうございました。後者の最後に元のハンドルに戻す方法で行こうと思います。
>>742 氏の指摘しているDeleteObjectのタイミングですが、
私の(質問するきっかけとなった元の)ソースでは
AにSelectする前にA,B,CをまとめてCreatePenし、
最後のprevに戻す処理の後で3つまとめてDeleteObjectしています。
VCというコンパイラでないとだめなみたいですね。 #include <windows.h> #include <iostream.h> #include <search.h> #include <string.h> #include <stdio.h> int compare( const void *arg1, const void *arg2 ); main(){ BYTE a[7] = {0x10, 0x11, 0x12, 0x13, 0x65, 0x66, 0x0}; BYTE b[3] = {0x12, 0x13, 0x65}; unsigned int num = 7; char *p; p = (char*)_lfind(b, a, &num, sizeof(BYTE), compare); printf("%s", p); } int compare(const void *arg1, const void *arg2 ){ return( _stricmp( * (char**)arg1, * (char**)arg2 ) ); } _lfind と _stricmp か未定義だと言われてしまいました。 BM法に夢を託します。
つーか、_lfindは要素単位で探すんだから使えないんでは?
>>777 それでいいと思われ。
使う前にCreateし、いざ使うときになったらSelectし、使い終わったらDelete。
Deleteは忘れちゃまずいから、まとめてするようにしてます。俺はね。
strstr みたいな memmem を自作したほうが楽だし汎用性が高いと思うが _lfind を使ってできないこともないだろう。 int compare(const void*p,const void*q) { const BYTE*a=(BYTE*)q; const BYTE*b=(BYTE*)p; return (a[0]!=b[0])&&(a[1]!=b[1])&&(a[2]!=b[2]); } int main(void) { BYTE a[]={'0','1','2','3','4','5','6','\0'}; BYTE b[]={'3','4','5'}; unsigned int num=sizeof(a)-sizeof(b); printf("%s\n",_lfind(b,a,&num,1,compare)); return 0; }
車輪の再発明〜♪
> 782 で、1個目の車輪は何処に?
_lfindのソースはSDKにあったりするな。 自分で同等品作るならSTL的に書くのがいいと思うが。
>>721 できました。感謝感激です。ありがとうございますた。
786 :
デフォルトの名無しさん :02/12/22 13:16
IEのツールに自前のツールを登録したいのですがどうやればいいですか?
>>788 Spy++で調べてみればいいけど、自分で描画するのが普通だぞ
790 :
名無し@沢村 :02/12/22 21:09
放置でお願いします
奴婢よばわりされてもでつか
だからトリップつけてないウザコテなど 共有煽りハンドルになるに決まってるといってるだろ
795 :
名無し@沢村 :02/12/23 20:32
ライトウェーブや3DStudioMaxのフォーマットなんてダサくて使えないよ。 せめてバーチャファイターのチェンリーなみのがサクサク動かないと…! PCの3Dはダサいから今のところ手を出していない…。
↑刺客をおくりました。 はい次の方質問をどうぞ
すいません、質問をします。 最新のWinXPのIE6で、ウィンドウの上側にツールバーがありますよね。(メニューやボタンやアドレス入力欄など) このツールバーの左側(XPだと縦の列で点が並んでいる)をドラッグすると、ツールバーを移動できますが、・・。 今VISUALC++6で開発をしていて、ウィンドウにツールバーをつけようとしていますが、表示されるツールバーが昔の98・MEのようなふるいツールバーになります。 最新のXPに対応したツールバーデザインを表示させるためには、どのように手を加えればいいのですか? 教えてください。
つづき・・・。 いわゆる、LUNAインターフェースですよね。 今HPを検索してますが・・・なかなか資料がでてこないです・・。 だれかおしえてください。
799 :
名無し@沢村 :02/12/23 22:16
もうちょっとでクリスマス。。★彡
パートナーは見つかりました?(o^.^o)
http://petitmomo.com/mm/ ここがちょっぴりエッチ系の沢村が運営している出会いサイトです。
もしよかったら使ってみて、、、
ヨロシクです。
名無し@沢村(^o^)-☆
>>798 manifestとかビジュアルスタイルでぐぐれ。
はい次の方
797が哀れだ しかも間違ってるし
>> 797 ReBar のことを言っているのか? だったら、ReBar とか クールバー でググる。 ReBar が何かわかったら、 あとは vector で配布されている Win32API のサンプルでも見て勉強。 ReBar が実現できたら、manifest とか試してみれ。
この前、人のソースをみたら、 HDC hdc = GetDC( hWnd ); HDC mdc = CreateCompatibleDC( hdc ); HBITMAP bmp = CreateCompatibleBitmap( hdc, x, y ); (中略) DeleteObject( bmp ); DeleteDC( mdc ); DeleteDC( hdc ); とかやってあって驚いた CreateDC, CreateCompatibleDC, GetDC, GetWindowDC, BeginPaint と、 DeleteDC, ReleaseDC, EndPaint の対応付けがわからないまま プログラムやっているヤツラってけっこういるのな。
806 :
名無し@沢村 :02/12/24 11:51
それくらい分かってますが、何か?
GetDCで取ってきたハンドルをDeleteDCしたら Windowsがお亡くなりにならないか? 漏れはなった(NT4.0)
>>805 まぁ、関数名を理解出来ていないって事だな
Get(取得)したからRelease(開放)してやる
Create(作る)したからDelete(削除)してやる
>>806 Object関数も理解出来ていな香具師には聞いてない
>>806 それくらい分かってるなら、さっさとリソース問題を解決しろよ。
屁みたいなもんだろ。
簡単に沢村に釣られるのはやめましょう はい次の方、質問をどうぞ
沢村って何人居るの?
次スレの 1 のテンプレには、是非 「名無し@沢村は徹底的に無視してください」 と 書いて欲しいな。
全員、「名無し@沢村」の名前にするとか。
勝手に 皆々様方〜教えてくだされ〜♪ (書き込みの内容) 教えてくだされ〜♪ に置換してくれるとなおよい。
その変換を自動で行う沢村ブラウザを・・・ 作るなよ?
ときどきビジー状態になる処理のあるアプリを作っています。 ビジー中のキー入力やマウスクリックは無視したいのですが、 どのようにすればよいのでしょうか?
EnableWindow() とか?
ファイルを検索するのはどうやればいいんですか
FindFirstFile() で、ディレクトリ出てきたら再帰かな?
>>816 ビジー処理を別スレッドで処理すれば理想的ですよ。
821 :
デフォルトの名無しさん :02/12/25 13:39
質問です。 巨大なファイル(数M〜数十Mまで、可能性としては数Gも扱いたい)の中の 非常に小さい一部分のみを変更・削除・追加する場合、 どのように処理をすればいいのか教えて貰えませんか?
変更はfopen("rw")/fseek/fwrite 追加削除は最後尾でないかぎり、全部をコピーしなおすしかない
途中の削除や追加が必要ならインデックスを作って状態を管理する DBの実装を参考に汁
824 :
デフォルトの名無しさん :02/12/25 14:31
>>822 それで数Mのファイルをアクセスするのはきついです…
>>823 エディタみたいな物で、ファイル形式を変えるわけにはいきませんし、
今までの情報を残しておくことも基本的には出来ません
セクタチェインとかをいじる方法だと、ファイルシステム依存になるので、
なにかそういうAPIがあるとは思うのですが、なかなか見つからず…
ないよ。
Windowsプログラミングしてる奴はリチャード・J・シモンの 1万円ギリギリマトリックスのWindows95 APIバイブル1/2/3本 持ってんの? 星の数ほどあるAPIを用途別に理解する為には買うべき?
Jeffrey RichterのAdvanced Windowsを穴があくまで読んで あとはMSDN libの検索を使いこなせるようになれば API一覧は要らないと思う
>>825 無い?確か大容量専門のAPIがあったと思ったが。
昔このスレで読んだような気がするぞ
ないよ。
メモリマップトファイルとmemmoveを使えばコピーしなおす 必要はないと思うが途中で強制終了されたりすると 確実にファイルが壊れる
>>830 ファイルを書き込んでいる時に強制終了されても、
どちらにせよファイルは壊れるのでは?
コピーしなおしなら、元のファイルが壊れることはないでしょ。
メモリマップトファイルを使うな、という話が昔あったなぁ。 ただファイルの内容をメモリに展開したいだけなら、多少面倒でも 自分で制御する方がいいだろうね。
メモリマップ`ト'ファイル プ
↑
>>833 結果としてコピーの回数を減らせたりしないと
メリットないね
英語の発音とカタカナがマップドだと思うな
つーか、ファイル扱うときには、どんなに小さな変更であれ、 一時ファイルを作ってそこへ書き込み、すべて正常に終了したら、 ファイルを置き換えるのが常識だと思うのですが。
>>839 で、ハードリンクがいつのまにかバックアップのほうを指していて
鬱になると。
Winにも標準でファイルへのシンボリックリンクがほしい。
841 :
デフォルトの名無しさん :02/12/25 17:02
>>840 >Winにも標準でファイルへのシンボリックリンクがほしい。
IShellLinkとIPersistFileでできるだろ
842 :
デフォルトの名無しさん :02/12/25 17:04
>>838 エンハンス ド とかあったからなー
ちょっと違和感持っても迂闊にプとか言えないよな
>>838 メジャーな解説書やサイトでは大体「マップト」だと思うが。
メジャー信奉者か プ
845 :
デフォルトの名無しさん :02/12/25 17:11
>843 うるこい
無声子音で終わった後のedはドでもトでもいいんでなかったか。
「ド」で合わせるのが日本語英語の常という事でよろしいか?
ブッシュ・ド・ノエル
>>821 NTFS限定でなら Sparse File で検索しれ。
Sparse Fileとはちと違ったか。早とちり。鬱。
そこの名前長いヤシうざい
>>852 239 名前:デフォルトの名無しさん 投稿日:2002/12/25(水) 18:50
お馬鹿さんは日本語も理解できないんだね。哀れ。
お化けなんてないさ、お化けなんて嘘さ♪ 2ちゃんの馬鹿が電波飛ばしたのさ〜
> 239 名前:デフォルトの名無しさん 投稿日:2002/12/25(水) 18:50 (゚Д゚)ハァ? > お馬鹿さんは日本語も理解できないんだね。哀れ。 「名前」 欄は名前を書くところだと理解できない香具師が居るんだね。遭われ。
マイクロソフトがメモリマップトと言っている以上、 MS系の開発に限っては「メモリマップト」と言うべきだと思われ。 英語の発音だと無声音化するし、だいたいカタカナでは書けないし。
857 :
デフォルトの名無しさん :02/12/25 19:20
>>854 その先は、
だけどちょっとだけどちょっと僕だって怖いさ。
だっけか?(w
858 :
デフォルトの名無しさん :02/12/25 19:21
えっと、Win32に関係ない話題はどうかと思うが
860 :
デフォルトの名無しさん :02/12/25 19:23
>>855 某スレの粘着厨房なので無視してやってください。
862 :
デフォルトの名無しさん :02/12/25 19:24
ム板で煽りあいはやめてくれぃ。
>>863 あんたが煽ってるんじゃん。
止まってたのに。
866 :
デフォルトの名無しさん :02/12/25 21:22
お?嵐か? 俺もはいろーか?
>>841 カーネルで解釈できないショートカットなんぞがほしいんじゃない。遅いし
868 :
デフォルトの名無しさん :02/12/25 21:33
ジュンマは実在した!
最後まで見なかった。結局、藤岡弘がジュンマだったんでしょ?
>>867 ハードリンクだってあるじゃん
ショートカットとUNIXのシンボリックリンクのどんな違いが気に入らないの?
>>871 fopen()の直呼びで元ファイルが開けるかどうかは
カーネルで解釈しているかどうかには関係ないし
速度に根本的な違いがあるわけでもないよね
漏れはダブルクリック以上の使い方でストレスがあるとすれば
ソース管理をフォルダ単位でやりたい時くらいだけど
ボリュームセットの中ではハードリンクできないんだっけ?
>>839 の時点での話では
fopen()の直呼びじゃなくても
よかったような...
874 :
デフォルトの名無しさん :02/12/26 00:43
昔(NT3.1か3.5時代だったような)、Win32SDKのヘルプかなにかで、 エディタのサンプルを見た記憶があります。 エディタといっても、Editを使うものではなくて、自分でゴリゴリ処理を 行うものでした。(といっても、サンプルっていうくらいだから、簡単なものでした) このサンプルって今どこにあるか分かる方はいらっしゃいますでしょうか?
>>874 それはしらないけど、今月のCマガでエディタ作ってたよ。
876 :
デフォルトの名無しさん :02/12/26 00:56
そんなヲタ雑誌買えません。。。
>>875 アリガトウ!(´▽`)
買ってくるよ。
>>870 > ハードリンクだってあるじゃん
840読みました? つーか841は840へのレスだから
読んでないわけないんだが脊髄反射だけでレスしてません?
>>872 > カーネルで解釈しているかどうかには関係ないし
関係大ありだと思うがそれはともかくようするに
どんなAPI使っても透過的に開いてくれないんじゃ
嬉しくない
> 速度に根本的な違いがあるわけでもないよね
実際遅いんだもん
Cygwinのnowinsymlinkとwinsymlinkで比べれば一目瞭然
ファイルのオープンしかしないのにshell32.dll
(ひいてはuser32だのgdi32だの)をロードさせられるのも
気に食わないし
あとショートカットはエクスプローラでツリー表示できないのもやだ もっともディレクトリへのシンボリックリンク相当物はすでにあるから たいした問題じゃないんだが
>>856 MSDN検索すると、どっちの語もヒットするんだよな。
まあ、翻訳者によるみたいな。
漏れ的にはどちらでもいいが、>844-845あたりは自分しか信じられない阿呆。
881 :
デフォルトの名無しさん :02/12/26 11:29
>880 うるこい
とりあえずmappedの発音記号を調べると「t」になってるわけだが。 英語のできないプログラマは(略
883 :
デフォルトの名無しさん :02/12/26 12:31
>882 うるこい
>>882 そんなことは百も承知のうえでやってたんじゃないの?
マップドもマップトも日本語。英語を使いたいならmappedと書けばいいだけの話。
>>884 >>834 ,838みたいなのが居るからおかしいんじゃないのって話になったかと。
>>885 まあそゆこと。
英語を日本語になおしたら「こうだ!」的な事を言うのが間違ってるし、
そんなプログラマは(略
まあ、正しいのはマップドだけどね
マップドだけで埋めようぜ
>>887-888 オマイラうるこい。
クダランことでスレ流すな。ボケェ
発音変わっただけで、動くプログラムが動かんようなるわけじゃないじゃろ。
ええかげんにせーや。
こんだけ需要があるんだから カタカナ読みスレでも立てれば? たしかUNIX板にはそんなスレがあったはず
マップルにしとこう
API は Application *Programmer* Interface なのに *Programming* ってかくバカが多くて困りますッ!!
ネタスレ!!(・∀・)
>>890 適当プログラマーだな。
真相を追求するのが真の技術者だよ。
適度にネタをたしなむのが真の技術者だよ。
>897
追求する部分を間違えているぞ。
発音なんか、地方訛りが加わると「ト」でも「ド」でもどうにでもならぁ
んな、くだらんこと議論するんだったら他へ逝け、ドアフォが
そんなものが真の技術者だったら、日本の開発者の未来は無いな。
ただ、
>>897-898 は真の技術者でないことが判明したんだがな
どうでもいいわけだが。
そろそろ次スレ立てようぜ。 Win32 Application *Programmer* Inteface 質問箱8
PerlをParlと書こうが、Googleをゴーグルと発音しようが、真の技術者ですか?
Perl 言語っていうヤシは張っ倒していい?
Windows 2000 を「にせん」と言おうが、「にーけい」と言おうが真の技術者です。 Tを「ティー」と言おうが、「テー」と言おうが真の技術者です。 スタジオを「ステューディオ」と発音しようと真の技術者です。
米国人と話する時はどうしましょう。
独自解釈、独自翻訳する人達の集まりはここですか?
>>908 まじめな話、「マップド」だろうが「マップト」だろうが通じる
というか日本語だって
「トーキョー エキ ハ ドコデスカ?」
と片言で発音めちゃくちゃで話しかけられても何とか理解できるだろ
きちんとした発音じゃないと通じないと思っているなら
米国人なめすぎだ
そもそも100%の翻訳なぞ存在せん罠 そこまでこだわるなら、翻訳自体許されない行為だろ。 英語のままで使え。 それも、米英どっちの英語かは知らんがな。
舞妓さん見て「ゲイシャガール」と言われるのもOKだとか? ちと違う?
もう鎖国するしかないな。
>913 外来語、外国語も禁止。
>>878 あるノードaへのリンクb,cがあって
aのコピーdを作りdに修正を加え
後でbをdへのリンクに貼り直したら
cがaへのリンクのままだったって話なら
b,cはハードリンクでもシンボリックリンクでもショートカットでも同じことだろ
IShellLinkがCOMでない形で欲しいならそう言えばいい
脊髄反射という医学用語の使い方がよくわからんが
仮に漏れが840を読んでいなかったとして
そんなのは漏れの勝手だ放っとけちゅーねん
あんたが840を読んでない者と話したくなければレスする義務はない
見も知らぬ者に何を甘ったれてるんだおまえは
>914 外来技術も禁止。
そしてぴゅう太日本語ベーシックへ(w
まだドとトの話やってたのか。。
純国産文化って貧弱ね
>>917 「日本語ベーシック」
ダメです。ベーシックは外来語です。
指輪物語の翻訳も俺はどうかと思うんだよね。 つか日本人って翻訳にたいする意識が低すぎ。
機械太日本語基礎
量に頼るなんて低俗だな
まったくだ。メジャーならそれでいいのかよ。
マイナーならそれでいいのかよ。
CreateFileMappingA(-1, ...) MapViewOfFileEx(hoge hoge hoge ...) で作成した領域に、プログラムファイルをロードして動作させているプログラムがあります。 この領域の保護属性をEXEにして、デバックしたいのですが、 最初の段階でSEC_IMAGEを加えても、 「%1は有効なWIN32アプリケーションではありません。」 (GetLastError+FormatMessageからとれるメッセージ) といわれてしまいます。 どうすればいいでしょうか?
x最初の段階 ○CreateFileMappingで
>>915 >>878 はただのUNIX厨なんだろ。
「Windowsは糞!UNIXこそは神!!マンセー!!!」
って叫びたいだけなんだから、そっとしとけ。
NTFS ってリンク作れなかったか? エクスプローラは対応していないようだが・・・。
931 :
デフォルトの名無しさん :02/12/26 19:47
>>924-925 量が多い方が、メジャーな方がいいに決まってるだろ。
どれだけ多くの人に通じるかが問題なんだから。
量が多いと大変なんだが・・・。
>>930 リンク・・・フォルダのハードリンク・・・ジャンクション便利よ。
お気に入り(の一部)を他ユーザと共有できるし。
× フォルダのハードリンク ○ フォルダのシンボリックリンク
935 :
デフォルトの名無しさん :02/12/26 20:17
アホ質問ですまん。。。 どこかにAPI関数一覧及びその意味・使い道を列挙した サイト・本は無いのですか???
936 :
デフォルトの名無しさん :02/12/26 20:24
VC++ 付属の MSDN
APIバイブ
939 :
名無し@沢村 :02/12/26 21:25
沢村って、マジで質問に答えてるよな・・・ もしかして、他の奴らよりマシな存在なのかも・・・
939=940
ヌヒよ、沢村って、マジで質問に答えてるよな・・・ もしかして、他の奴らよりマシな存在なのかも・・・、ヌヒよ。
>>941 ゴメン・・・今、少し酔ってるから・・・
ただ、ほ〜んの少し、沢村がマトモに見えてしまった・・・
> ヌヒよ この時点でまともでないと思われ
不良が偶にいいことをすると高く評価される現象と同じだ。
ストックホルム症候群みたいなものか。
947 :
デフォルトの名無しさん :02/12/26 23:46
WIN32_FIND_DATA x.cFileNameをCreateFileに使うにはどうすればよいでうsか。
>>947 引数lpFileNameにそのまま渡し、諸引数を設定すれば出来るけれど、
このような質問を投げているということはプログラミングに向いていないのかもしれない。
949 :
デフォルトの名無しさん :02/12/27 00:14
この板で質問をするということはプログラミングに向いていないのかもしれない。
この板で回答をするということはプログラミングに向いていないのかもしれない。
そのまま渡したんですけどカレントディレクトリから一個下のディレクトリにあるファイルは うまく開いてくれません。どうすればいいですか?
剥けてないと思う。
むしろ向いているけど左向き、みたいな。
>>951 相対パスと絶対パスを理解していればそういう質問は出てこないはずだが、
もしそうなら PC 初心者板に逝ってくれ。
右に何かあったりするの?
すみません。解決しました。 おさw
お騒がせしました。
次スレまだー?
959 :
デフォルトの名無しさん :02/12/27 04:18
VBで画像処理のプログラムを組んでるんですが 画素一つ一つの情報を取得する関数(~.Point()ってやつ)で、全画素について情報を得て 得た画素一つ一つについて反転処理をしたんですが どーにもPhotoshopのような超高速の反転処理と比べると足元にも及ばない遅い速度になってしまいます アルゴスレでも聞いたんですがどーやら使ってるAPIに問題があるとかで どうすれば高速化できるのでしょうか?
API云々の問題じゃないような…。 とりあえず使うとしたらGetPixel/SetPixelかな? でも、本格的な画像処理するんだったらいちいちそんなことしないでしょ。
って、アルゴリズムスレで言われたのね。 失礼。(アルゴスレって初めて聞いた)
962 :
デフォルトの名無しさん :02/12/27 04:27
反転ならBitBlt一発で出来るのでは?
963 :
デフォルトの名無しさん :02/12/27 04:28
BitBlt一発ならPhotoshopより速いだろうね。
VBならPaintPictureでも一発反転できるんじゃないの?
959 は根本的に勘違いしてるでしょ。 Photoshop のようなペイントソフトは、内部に独自の作業領域を持ってる。 普通にプログラム内の配列のように使っている領域だ。 反転などの処理はその作業領域に対して行っていて、画面に直接描画しているわけでは ない。 描画に必要な時にはじめてその作業領域をビットマップとして画面に貼りつける。
その作業領域に読み込ませる方法と ビットマップとして画面に貼付ける方法をぜひ教えてください
アドビに聞けや
>>966 DIBセクションを作業領域として使うんじゃだめ?
> あるノードaへのリンクb,cがあって > aのコピーdを作りdに修正を加え > 後でbをdへのリンクに貼り直したら > cがaへのリンクのままだったって話なら そんな話は誰もしてない。勝手にお前の都合のいいように 話を作り替えるな。 > IShellLinkがCOMでない形で欲しいならそう言えばいい だから誰もそんなこと言ってない。 > 仮に漏れが840を読んでいなかったとして > そんなのは漏れの勝手だ放っとけちゅーねん そうだな。ハードリンクと言ってる奴に対して ハードリンクがあるじゃんといったり 遅いといってるのにCOM以外のインターフェース がどうとかぜんぜん無関係の話はじめて恥かくのは お前だし確かに余計なお世話だった
>969 シツコイ(・∀・)カエレ!!
>>968 なんかよくわからないので
基本を勉強してからまたこのスレ戻って来ます
VBでDIBセクションってつかえるのか?
>>973 >VBでDIBセクションってつかえるのか?
見落としてました。スマヌ。
975 :
名無し@沢村 :02/12/27 16:14
>>959 反転させるだけなら、
Picture1.DrawMode = vbInvert
Picture1.Line ( 0 , 0 )-( 100 , 100 ), , BF
で出来ると思います。
977 :
デフォルトの名無しさん :02/12/28 02:24
どうしてVBではDIBセクションが使えないの?
>>977 使えるけど、VBはポインタがないからうまみが少ない。
他のアプリにキー送信するプログラムを組んでいます。 keybd_event関数を調べていたら、sendinput関数を推奨とおり、 サンプルを探したのですがみつかりませんでした。 サンプルでいい参照先がありましたら教えてください。
MSDN に載ってたけど・・・ 次のサンプルコードは、仮想キー VK_NUMLOCK を指定して keybd_event() を 使うことにより、NumLock のランプをトグルさせます(Windows NT のみ)。 1 個の Bool 型の値を使って、ランプがオフ(FALSE)とオン(TRUE)のどちら になっているかを表します。CapsLock キー(VK_CAPITAL)と ScrollLock キー (VK_SCROLL)にも、これと同じ手法を適用できます。 #include <windows.h> void SetNumLock( BOOL bState ) { BYTE keyState[256]; GetKeyboardState((LPBYTE)&keyState); if( (bState && !(keyState[VK_NUMLOCK] & 1)) || (!bState && (keyState[VK_NUMLOCK] & 1)) ) { // キーの押し下げをシミュレートする。 keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // キーの解放をシミュレートする。 keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } void main() { SetNumLock( TRUE ); }
>>980 ありがとうございます。私の記述が悪かったのですが、知りたかったのはSendinputを
つかったものだったのです。新しいスレッドができているようなのでそちらで改めて質問
してみます。