purebasic.info

PureBasic forum
Текущее время: Чт сен 20, 2018 10:01 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 05, 2011 5:46 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Bill Kaulitz писал(а):
Как?

Смеяться будешь, но так:
Код:
1
RunProgram("C:\Windows")


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 05, 2011 5:50 pm 
Не в сети
док

Зарегистрирован: Чт мар 03, 2011 7:38 am
Сообщений: 108
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
:lol:
Спасибо Пётр!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 06, 2011 7:18 am 
Не в сети
док

Зарегистрирован: Чт мар 03, 2011 7:38 am
Сообщений: 108
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Пользуюсь моментом, спрошу по другой теме) В одной теме Вы мне не ответили может потому что не заметили, думаю здесь переспрошу

Пётр писал(а):
Есть другой вариант, на флешке найти все EXEшники и открыть их с помощью OpenFile.
Тогда они не запускаются.


А можно сделать как нибудь чтоб они даже не копировались?
Принимаются любые варианты) даже самые нелепые.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 06, 2011 9:24 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6382
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
Bill Kaulitz писал(а):
А можно сделать как нибудь чтоб они даже не копировались?

Конечно нет. Если бы это было возможно, то с пиратством было бы покончено уже давно! В том и прелесть, что ещё не изобрели способ, который препятсвовал бы копированию информации со стандартного цифрового носителя. Так что у тебя есть шанс его изобрести - станешь неимоверно богатым человеком. Но не долго проживешь - я буду первый в очереди, что бы кинуть в тебя камень :D

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 06, 2011 10:14 am 
Не в сети
док

Зарегистрирован: Чт мар 03, 2011 7:38 am
Сообщений: 108
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
kvitaliy писал(а):
Конечно нет. Если бы это было возможно, то с пиратством было бы покончено уже давно! В том и прелесть, что ещё не изобрели способ, который препятсвовал бы копированию информации со стандартного цифрового носителя. Так что у тебя есть шанс его изобрести - станешь неимоверно богатым человеком. Но не долго проживешь - я буду первый в очереди, что бы кинуть в тебя камень

:D

Спасибо всем и бибилотеке Друпи(которая увы не без глюков) я наконец-то разобрался что такое РЕЕСТР и как с ним работать.
Вот КОД - результат практики (ничего особенного, позже расширю код дабы добавить в Винду фичи для удобства), думаю ему самое место здесь. Испытывал на Windows 7 (x64) все работает. На счет ХР не знаю. Если комманды РЕЕСТРА не изменились, то тоже должен работать.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
; Программа добавляет в контекстное меню рабочего стола пункт для быстрого запуска выбранных программ
; abzhapparovmaxat
 
;Гаджеты
dobavit = 1
spisok = 2
udalit = 3
;Гаджеты
 
;Создаем рабочее окно
OpenWindow(0, 0, 0, 210, 260, "FastRun",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(dobavit,5,5,200,20,"Добавить")
ListViewGadget(spisok, 5, 30, 200, 200)
ButtonGadget(udalit,5,235,200,20,"Очистить")
GadgetToolTip(dobavit, "Добавить приложение в список")
GadgetToolTip(spisok, "Двойной клик по пункту откроет папку где расположен файл")
GadgetToolTip(udalit, "Очистить весь список")
 
 
;Создаем список уже существующих КЛЮЧЕЙ реестра
Index=0
PathToCommand$ = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\Shell"
 
While RegListSubKey(PathToCommand$,Index,".") <> "" ;Считаем количество пунктов
  Index+1
Wend
 
For i = 1 To index ;Добавляем в гаджет уже существующие КЛЮЧИ
  If  RegKeyExists(PathToCommand$  + Str(i) + "FastRun",".")
    put_k_proge$ = RegGetValue(PathToCommand$ + Str(i) + "FastRun\command","",".")
    AddGadgetItem(spisok, i-1, Left(GetFilePart(put_k_proge$), Len(GetFilePart(put_k_proge$))-4))
  EndIf
Next i
 
If CountGadgetItems(spisok)<1 ; Если гаджет пустой, то
  MessageRequester("О программе (abzhapparovmaxat)","Программа добавляет в контекстное меню рабочего стола пункт для быстрого запуска выбранных программ (только для Windows 7)",#PB_MessageRequester_Ok)
EndIf
 
;Цикл
Repeat
  event=WaitWindowEvent()
  Select event
    Case #PB_Event_Gadget
      Select EventGadget()
         
        Case udalit ; Нажатие кнопки "Очистить"
         
          colichestvo_punktov = CountGadgetItems(spisok)
          For c = 1 To colichestvo_punktov
            RegDeleteKeyWithAllSub("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell"+Str(c) + "FastRun",".")
          Next c
          RegDeleteKeyWithAllSub("HKEY_CLASSES_ROOT\DesktopBackground\Shell\FastRun",".")
          ClearGadgetItems(spisok)
         
        Case dobavit ; Нажатие кнопки "Добавить"
         
          colichestvo_punktov = CountGadgetItems(spisok) ; Количество пунктов в гаджете
          file$=OpenFileRequester("","","Все файлы|*.exe",0) ; Открываем "Открыть Файл"
          If file$ <> "" ; Если было выбрано что-нибудь, то
            ; Запись в список название выбранного приложения
            AddGadgetItem(spisok, colichestvo_punktov , Left(GetFilePart(file$), Len(GetFilePart(file$))-4))
            ; Регистрация команд в реестре
            RegCreateKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell" + Str(colichestvo_punktov+1) +"FastRun\command",".")
            RegSetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell" + Str(colichestvo_punktov+1) + "FastRun\command","", file$ ,#REG_SZ,".")
            RegSetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell" + Str(colichestvo_punktov+1) + "FastRun","", Left(GetFilePart(file$), Len(GetFilePart(file$))-4) ,#REG_SZ,".")
            RegSetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell" + Str(colichestvo_punktov+1) + "FastRun","Icon", file$ ,#REG_SZ,".")
           
            ; Создание раскрывающегося меню и добавление в него пунктов
            RegCreateKey("HKEY_CLASSES_ROOT\DesktopBackground\Shell\FastRun",".")
            RegCreateKeyValue("HKEY_CLASSES_ROOT\DesktopBackground\Shell\FastRun","MUIVerb","FastRun",#REG_SZ,".") ; Даем название пункту в конт. меню
            RegCreateKeyValue("HKEY_CLASSES_ROOT\DesktopBackground\Shell\FastRun","Position","Top",#REG_SZ,".") ; Задаем позицию вверху в конт. меню
            RegCreateKeyValue("HKEY_CLASSES_ROOT\DesktopBackground\Shell\FastRun","Icon",ProgramFilename(),#REG_SZ,".")
            spisok_sc$ = RegGetValue("HKEY_CLASSES_ROOT\DesktopBackground\Shell\FastRun","SubCommands",".")
            RegCreateKeyValue("HKEY_CLASSES_ROOT\DesktopBackground\Shell\FastRun","SubCommands", spisok_sc$ + Str(colichestvo_punktov+1) + "FastRun;" ,#REG_SZ,".")
          EndIf
         
        Case spisok
          Select EventType()
            Case #PB_EventType_LeftDoubleClick ; Двойной клик по пункту в гаджете
              raspolojenie_file$ = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell" + Str(GetGadgetState(spisok)+1) + "FastRun\command"
              RunProgram(GetPathPart(RegGetValue(raspolojenie_file$,"","."))) ; Открываем расположение фаайла выбранного пункта
            EndSelect
      EndSelect  
    Case #PB_Event_CloseWindow
      Exit=1
  EndSelect
Until Exit



Последний раз редактировалось Bill Kaulitz Ср апр 06, 2011 7:34 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 06, 2011 11:38 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6382
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
Bill Kaulitz писал(а):
Испытывал на Windows 7 (x64) все работает. На счет ХР не знаю.

В Win7 х86 у меня тоже работает, а вот ва ХР не работает. В реестр пишет видимо - список добавленных программ в окне самой утилиты есть, но реально пункты в меню не появляются.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 06, 2011 11:47 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Bill Kaulitz писал(а):
которая увы не без глюков
Проверь её работу в PB 4.00 - стабильней будет работать.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 02, 2013 1:09 pm 
Не в сети
студент

Зарегистрирован: Сб сен 29, 2012 8:15 pm
Сообщений: 3
Откуда: Казань
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
В контекстном меню ещё есть пункт "Отправить", и там Skype, адресат, документы, Bluetooth и т.д.
Не знаете, как туда добавить свой пункт, и в каком месте реестра это делается?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 02, 2013 2:55 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Нияз писал(а):
Не знаете, как туда добавить свой пункт, и в каком месте реестра это делается?
Даже в реестр лезть не нужно. Запустите программу "Выполнить" (Win+R). Введите туда
Цитата:
shell:sendto
и нажмите кнопку Enter. Откроется папка, содержащая ярлыки из пункта "Отправить". Просто перетащите туда ярлык к своей программе, и она появится в меню. Возможно, нужно будет комп перезагрузить, не проверял, проверил только, что папка действительно открывается.
А вообще, много полезной инфы по меню "Отправить" хранится здесь: http://winreview.ru/sekrety-kontekstnogo-menyu-otpravit/. Очень полезный сайт.

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню файлов
СообщениеДобавлено: Пт мар 28, 2014 8:58 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 772
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
kvitaliy что должен делать твой код, что то не пойму, я думал что при правом клике на файле в меню должен появится пункт но ничего не появляется.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню файлов
СообщениеДобавлено: Сб ноя 21, 2015 10:31 am 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1694
Откуда: Алматы
Благодарил (а): 15 раз.
Поблагодарили: 46 раз.
Пункты репутации: 5
вот и я думаю расширить немножко функционал своей мегапрограммы... и хотелось бы добавить в контекстное меню свои причиндалы. вот в связи с чем возникают две проблемы:
1. добавление в реестр
2. программа то все время запущена, то есть получается нужно как-то передавать ей нужный параметр - путь до файла и чтоб программа запускала определенную функцию.

насчет второй я даже пока и не представляю... а насчет первой вроде как понятно.
а. для начала нужно создать раздел HKEY_CLASSES_ROOT\.bin (так как мне расширение бин надо) если такого расширения небыло. то есть получается предварительно нужно проверить существует ли такой ключ.
б. в этом пути пункт PersistentHandler отвечает за обычный клик по файлу с таким расширением и содержит в себе путь типа {098f2470-bae0-11cd-b579-08002b30bfeb} - в котором уже все более конкретно расписано. ну это пока не нужно.
г. я так понимаю что по этому пути HKEY_CLASSES_ROOT\.bin мне нужно создать папку ShellEx - правильно?
д. внутри этой папки ShellEx создать еще одну папку... эээ... по видимому с названием что-то типа {BB2E617C-0920-11D1-9A0B-00C04FC2D6C1} где создать параметр по умолчанию точно такой-же {BB2E617C-0920-11D1-9A0B-00C04FC2D6C1}
е. создать по пути HKEY_CLASSES_ROOT\CLSID\ папку {BB2E617C-0920-11D1-9A0B-00C04FC2D6C1}
ж. так... а дальше не понятно... по идее там нужно создать еще какую-то папку, где надо указать путь до программы и 1% к ней...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню файлов
СообщениеДобавлено: Сб ноя 21, 2015 2:50 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1694
Откуда: Алматы
Благодарил (а): 15 раз.
Поблагодарили: 46 раз.
Пункты репутации: 5
оказалось не в том направлении копал :)

нужно было открыть .bin и посмотреть значение по умолчанию - а это было bin_auto_file
вот его надо было найти дальше по реестру и уже в нем колдовать. shell - в нем надо было создавать папки для новых действий с названиями пункта и что запускать с тем 1%. с этим разобрались.

теперь что касается второй проблемы:
во первых мне нужно ProgramParameter(0) - то есть таким образом программа будет получать путь до файла, по которому мы собственно щелкали меню
во вторых - если программа уже запущена, то вторая копия программы видимо должна будет ретранслировать этот параметр пути в запущенную первую копию. то есть нужно сделать некий функционал "приема" программой такого параметра. я так предполагаю что делается это через обрабатывание событий. у меня даже вроде что-то подобное есть:
Case #WM_APP - на случай если обновлятор программы хочет установить новую версию, то старую же надо закрыть - вот с помощью неё происходит закрытие. теперь вопрос - коим образом добавить еще и получение информации?

блокирую повторный запуск своих программ замечательным кодом Петра:
Код:
1
2
3
4
5
6
7
8
9
   Global mnpparam$ = ProgramParameter(0)
 
      ProgName.s=GetFilePart(ProgramFilename())
      a = CreateSemaphore_(#Null,0,1,@ProgName) ; Если прога уже запущена, то завершаем работу этой копии программы.
      If a<>0 And GetLastError_()=#ERROR_ALREADY_EXISTS
         CloseHandle_(a)
         ;видимо в этом месте надо стартовать функционал отсылки параметра в виде пути до файла в первую копию программы
         End
      EndIf



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню файлов
СообщениеДобавлено: Сб ноя 21, 2015 3:06 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1694
Откуда: Алматы
Благодарил (а): 15 раз.
Поблагодарили: 46 раз.
Пункты репутации: 5
хотя чото я огород горожу... можно же просто в зависимости от параметра запускать или всю программу, или копию программы, которая выдаст окно с результатами и после закрытия которого - закроется вторая копия :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу Пред.  1, 2, 3, 4, 5

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB