デスクトップのアイコンの場所を移動

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぺよん

デスクトップのアイコンの場所を移動

#1

投稿記事 by ぺよん » 13年前

どうも!いつもお世話になっております。
デスクトップのアイコンの場所を移動させるプログラムを作成しようとしてるのですが、
こちらの http://7ujm.net/C++/DesktopIconPoint.html サイトのコードを参考にしているのですがどうやって作ればいいかわかりません。
C言語初心者です。VC++2010を使用しています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: デスクトップのアイコンの場所を移動

#2

投稿記事 by softya(ソフト屋) » 13年前

初めてのような気もするのですが、ぺよんさんは前は別の名前でしたか?
サイトを見ましたがWindows(Win32)APIを使っているようです。
Windows(Win32)APIでのアプリは作成した経験がお有りでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ぺよん

Re: デスクトップのアイコンの場所を移動

#3

投稿記事 by ぺよん » 13年前

かなり前に『でんでん』と言う名前で質問させていただいたことがあります。
Win32は一応使ったことがあるのですが、アプリと呼べる物では無くウィンドウを作成する程度です。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: デスクトップのアイコンの場所を移動

#4

投稿記事 by softya(ソフト屋) » 13年前

で、何処が分からないのでしょうか?
すごくやりたい事はコンパクトに示されているサンプルコードだと思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ぺよん

Re: デスクトップのアイコンの場所を移動

#5

投稿記事 by ぺよん » 13年前

一応、見よう見まねで書いてみたのですが。

#include <windows.h>
#include <tchar.h>
#include <commctrl.h>
#pragma comment(lib, "comctl32.lib")


#define WINDOW_WIDTH (400)
#define WINDOW_HEIGHT (300)
#define WINDOW_X ((GetSystemMetrics( SM_CXSCREEN ) - WINDOW_WIDTH ) / 2)
#define WINDOW_Y ((GetSystemMetrics( SM_CYSCREEN ) - WINDOW_HEIGHT ) / 2)
#define ID_STATUS (100)




int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{



HWND hWnd;
hWnd = FindWindow("ProgMan",NULL);
hWnd = GetWindow(hWnd,GW_CHILD);
hWnd = GetWindow(hWnd,GW_CHILD);
if(!hWnd) return false;

DWORD dwProcessId;
GetWindowThreadProcessId(hWnd,&dwProcessId);
HANDLE hProcess = OpenProcess(
PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE,
FALSE,dwProcessId);
if(!hProcess) return false;


POINT* pnt = (POINT*)VirtualAllocEx(hProcess,
NULL,4096,MEM_RESERVE | MEM_COMMIT,PAGE_READWRITE);
POINT iconPos;

ListView_GetItemPosition(hWnd,0,pnt);

ReadProcessMemory(hProcess,pnt,&iconPos,sizeof(POINT),NULL);

VirtualFreeEx(hProcess,pnt,0,MEM_RELEASE);

}

動かないのです。

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: デスクトップのアイコンの場所を移動

#6

投稿記事 by beatle » 13年前

アイコンの場所を移動させたいのか,アイコンの場所を取得したいのか,どっちですか?

ぺよん

Re: デスクトップのアイコンの場所を移動

#7

投稿記事 by ぺよん » 13年前

アイコン移動です。

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: デスクトップのアイコンの場所を移動

#8

投稿記事 by beatle » 13年前

ぺよんさんのソースコードはぺよんさんがお示しになったサイトのサンプルのうち,「○デスクトップのアイコンの場所を取得する」をコピペしているように見えます.「○デスクトップのアイコンの場所を移動する」の方を試してみましょう.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: デスクトップのアイコンの場所を移動

#9

投稿記事 by softya(ソフト屋) » 13年前

codeタグを利用とインデントの整形をお願いします。インデントに関しては「投稿前チェックリスト(beatleさん作成)」も確認して下さい。
http://dixq.net/board/board.html

指摘されていますが、移動ではなく取得のコードを使っていますね。
あとコードの1命令づつの動作を調べられましたか?
サンプルコードは書き方の例であって、1命令づつの動作を把握しないと思うようなものは作れませんよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ぺよん

Re: デスクトップのアイコンの場所を移動

#10

投稿記事 by ぺよん » 13年前

すいません、コードを書き込むのは初めてだったので知りませんでした。
一応、移動の方で書いてみたのですが。

コード:


#include <windows.h>
#include <commctrl.h>                
#pragma comment(lib, "comctl32.lib")

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
  HWND hWnd;
  hWnd = FindWindow("ProgMan",NULL);
  hWnd = GetWindow(hWnd,GW_CHILD);
  hWnd = GetWindow(hWnd,GW_CHILD);
    if(!hWnd)
        return false;
    SendMessage(hWnd, LVM_SETITEMPOSITION, (WPARAM)0, (LPARAM) MAKELPARAM ((int) 10, (int) 10));//set
}

ビルドはされるのですが、デバックしても反応が無いです。
あと、『.cpp(24): warning C4715: 'WinMain' : 値を返さないコントロール パスがあります。』というのが出ます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: デスクトップのアイコンの場所を移動

#11

投稿記事 by softya(ソフト屋) » 13年前

XPだと大丈夫だと思いますが、WindowsVista/7はデスクトップの設定を変えて自動整列・等間隔整理を止めたりしないとダメだと思います。
あるいはUACがじゃまをするかも知れませんし、しないかも知れません。都合があってこちらでは申し訳ないですが試せません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

fulls
記事: 72
登録日時: 14年前
住所: 埼玉

Re: デスクトップのアイコンの場所を移動

#12

投稿記事 by fulls » 13年前

ぺよん さんが書きました:あと、『.cpp(24): warning C4715: 'WinMain' : 値を返さないコントロール パスがあります。』というのが出ます。
これはメイン関数が値を返しませんということです。

コード:

    if(!hWnd)
        return false;
でhWndが取得できなかった時は失敗という形でメイン関数を終わらせているようですが、正しくhWndを取得した時は明示的にプログラムを終了できていません。
WinMain関数の最後に

コード:

return 0;
とかをいれて置けば警告は出ないと思います。

あと一つ気になったのですが、返り値がintなのにfalseを返すと言うのはやって構わないことなのでしょうか?
他の方の質問で聞いてしまってすいません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: デスクトップのアイコンの場所を移動

#13

投稿記事 by softya(ソフト屋) » 13年前

pefs3d さんが書きました:あと一つ気になったのですが、返り値がintなのにfalseを返すと言うのはやって構わないことなのでしょうか?
他の方の質問で聞いてしまってすいません。
本当はあまり良くないですが、C99であればstdbool.hにfalseは0と定義されています。
C++ではfalseは0なのでintの戻り値として使用出来てしまいます。
まぁ。どちらにしても使わないほうが良いのは確かです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

fulls
記事: 72
登録日時: 14年前
住所: 埼玉

Re: デスクトップのアイコンの場所を移動

#14

投稿記事 by fulls » 13年前

softya(ソフト屋) さんが書きました: 本当はあまり良くないですが、C99であればstdbool.hにfalseは0と定義されています。
C++ではfalseは0なのでintの戻り値として使用出来てしまいます。
まぁ。どちらにしても使わないほうが良いのは確かです。
ありがとうございます。

ぺよん

Re: デスクトップのアイコンの場所を移動

#15

投稿記事 by ぺよん » 13年前

softya(ソフト屋) さんがおしゃったとうり、自動整列・等間隔整理を止めてプログラムを管理者として実行したのですが・・・
何故かアイコンが一番左上に行ってしまいます。
あと、アイコンの移動場所はコードのどこを変えればいいのですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: デスクトップのアイコンの場所を移動

#16

投稿記事 by softya(ソフト屋) » 13年前

上にも書きましたが1命令ごとの動作をちゃんと調べないと意味がありません。
プログラムすると言う事は理解して使うことです。
解析して何処の命令が分からないか聞いて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る